1. 从一次构建提速说起Rstack 那四件套凭什么出圈去年手上一个中后台项目webpack 冷启动 40 多秒改一行样式 HMR 要等三秒才刷新团队里谁都懒得动构建配置怕改坏。后来把 webpack 换成 Rspack冷启动掉到 5 秒以内热更新几乎是即时的那次之后我才认真去翻字节跳动开源的那一批前端项目发现它们早就不是零散的小工具而是一整条从构建、设计系统到可视化、跨端的完整链路。这篇就按用途把 15 个项目拆开讲清楚各自解决什么问题、适合多大规模的项目、上手要躲哪些坑以及我实际用下来的体感。刚入门工程化的同学可以当路线图看做中后台、大屏或跨端的朋友里面大概率有几套能直接替掉你现在手里的轮子。1.1 Rspack用 Rust 重写打包意义到底在哪Rspack 是字节 Web Infra 团队用 Rust 写的打包器核心卖点是兼容 webpack 的配置与插件生态同时把构建速度拉上一个数量级。它的做法是把最耗时的模块解析、依赖图构建、代码生成这些环节放进 Rust 里做多线程并行JS 侧只保留插件调用的胶水层。为什么这件事值得单独拎出来说因为在此之前前端换打包器的成本极高。Vite 走的是 dev 阶段不打包、生产仍用 Rollup 的路子很多重度依赖 webpack loader 的老项目根本换不过去。Rspack 的策略是你别动配置我帮你跑快——webpack 的 loader、plugin 大部分能直接复用迁移成本被压得很低。实测里要留意的点Rspack 对 webpack 的兼容是绝大多数而不是全部。凡是依赖 webpack 内部私有 API比如compiler.hooks深处、NormalModule的私有字段的插件基本会挂。我踩过一次是某个老旧的 CSS 处理插件最后换成 Rspack 内置的builtin:swc-loader才跑通。迁移前先跑一遍官方的兼容性检查清单比改完再一个个排错省事得多。1.2 Rsbuild 与 Rslib把应用和库的构建分开治Rsbuild 建立在 Rspack 之上定位是开箱即用的构建工具。Rspack 是引擎Rsbuild 是整车帮你把 HTML 生成、CSS 处理、环境变量、代理、资源压缩这些默认配置一次性配好只暴露少量语义化配置项。以前搭一个 React 项目要手写几十行 webpack config现在rsbuild.config.ts里几行就够。Rslib 则是专门为库打造的构建工具基于 Rspack 但补上了库打包特有的东西多格式产物ESM/CJS、类型声明生成走dts插件、external依赖处理、按需产物。为什么库和应用要分开因为应用只关心能不能跑起来库要关心别人怎么引、会不会把 React 一起打进去、类型声明全不全。这两套诉求混在一个配置里最后一定是互相将就。我的经验是发 npm 包的仓库直接上 Rslib省掉自己拼 Rollup tsc 的功夫业务应用用 Rsbuild。两者配置文件风格接近团队里不用记两套心智模型这点对多人协作很友好。1.3 Rspress文档站也能吃到构建红利Rspress 是基于 Rsbuild 的静态站点生成器对标的是 VitePress / Docusaurus 这一类。它的优势是和 Rstack 生态共用构建内核——如果你的组件库本身用 Rspack 构建文档站用 Rspress构建缓存、依赖版本、插件行为都是一致的不会出现组件能编译、文档站编译报错这种割裂。用下来的感受MDX 支持、主题定制、全文搜索、国际化这些常见需求它都覆盖了。要注意的是它的主题扩展点和 VitePress 不完全一样从 VitePress 迁过来的自定义组件需要改一改挂载方式。对新建文档站来说它是个很省心的选择。2. 设计系统怎么选Arco、Semi 与 IconPark 的定位差异中后台项目的组件库选型几乎是每个团队都会纠结一轮的事。字节在这个方向上有两套主流方案外加一个图标库经常被放在一起比较但其实它们的基因完全不同。2.1 Arco Design中后台组件密度的代表Arco Design 是字节较早开源的企业级设计系统同时提供 React 和 Vue 两个版本这点在国内组件库里不算常见。它的组件密度偏高表格、表单、穿梭框这类数据密集型组件的功能和可配置项非常全天生就是冲着中后台、数据管理平台去的。为什么密度重要因为中后台一个页面里往往要塞十几个筛选项、几十列数据组件如果留白太大一屏信息量就上不去。Arco 在这一点上做得比较克制默认尺寸偏紧凑。它的主题系统走的是 design token less 变量的路子换主题色、调圆角、改间距都比较直接。需要留意的是Arco 的 Vue 版本和 React 版本在部分 API 上并非 100% 对齐跨技术栈复用时别假设它们一模一样以对应版本文档为准。2.2 Semi Design从抖音设计语言长出来的组件库Semi Design 来自抖音前端团队主打 React。它的设计语言比 Arco 更现代一些圆角、间距、动效都更接近 C 端产品的观感所以它不只做中后台也能撑起偏消费级的界面。它的主题方案用 CSS 变量design token驱动换肤、暗色模式切换是运行时就能生效的不需要重新编译。Semi 有个比较讨喜的设计组件 API 的语义命名比较统一onChange、value、disabled这类通用属性在各组件间保持一致学习成本低。它还提供了配套的 D2C设计稿转代码和主题商店设计到开发的链路是打通了的。两套怎么选我的判断标准很朴素偏重数据密度和 Vue 技术栈看 Arco偏 React、想要更现代的视觉和更顺畅的换肤看 Semi。当然如果团队已经有一套设计规范谁的 token 体系更容易对齐就选谁。2.3 IconPark一个被低估的图标方案IconPark 是个图标库单看名字容易觉得图标库有什么好讲的。但它解决了一个真实的痛点同一套图标的多主题、多风格复用。传统做法是每个风格一套 SVG改一次设计要改好几套IconPark 的思路是一个 SVG 源文件通过配置变换出线框、填充、双色、多色四种主题改一处就能全体生效。它还提供在线定制平台可以在网页上实时调线宽、端点、颜色导出 React/Vue/SVG 组件。做设计系统的时候把图标和组件库用同一套视觉参数管理一致性上省心很多。唯一要注意的是按需引入整包引入会明显增大体积用它的 babel/vite 插件做按需加载即可。3. 数据可视化这条线VisActor 里的 VChart、VTable、VMind大屏和数据报表是前端绕不开的场景VisActor 就是字节在这个方向上的开源套件包含 VChart、VTable、VMind、VGrammar、VRender 等多个包。这里挑三个最有代表性的讲。3.1 VChart用语法描述图表而不是堆配置VChart 是一套图表库覆盖常见的折线、柱状、饼图、地图、桑基图等几十种图表类型。它和 ECharts 那种配置驱动最大的区别是引入了**图形语法Grammar of Graphics**的思路你先声明数据的维度和度量再声明用哪些视觉通道位置、颜色、大小去映射图表形态是推导出来的。这个思路的好处是可组合。比如想在一张图里叠加柱状和折线、做双轴、做自定义标注用语法描述会比在 ECharts 里翻文档找对应的 option 更顺。代价是学习曲线略陡第一次接触要花点时间理解标记 通道这套概念。实际项目里我一般先用官方示例找到最接近的图再在它的 spec 上改比从零写快得多。它的跨端能力也值得一提同一份 spec 在 Web 和移动端通过对应的渲染方案能复用。3.2 VTable百万行数据下的表格性能边界VTable 是高性能表格组件主打的是大数据量 复杂表头 单元格自定义渲染。中后台最怕的就是表格卡几万行数据一渲染浏览器直接失去响应。VTable 用的是虚拟滚动 按需渲染 canvas/DOM 混合渲染的方案官方宣传能撑到百万级单元格。我自己测过几万行的场景滚动确实顺。要注意的是一旦用上 canvas 渲染单元格内的自定义组件比如下拉框、富文本就得走它提供的自定义渲染接口不能像普通 DOM 表格那样随便往单元格里塞 React 组件。这是性能换来的代价选型时要评估业务对单元格交互复杂度的要求。3.3 VMind把自然语言变成图表的尝试VMind 是套件里偏智能的一块定位是用自然语言生成图表 spec。你给它一句按月展示各地区的销售额趋势它尝试输出一份可用的图表配置再交给 VChart 渲染。它适合什么场景数据看板里让非技术同学自己说一句就出图或者做 BI 类的产品。但我的建议是别把它当成万能入口——复杂业务口径的数据语言描述很容易有歧义生成的图未必对。比较务实的用法是把它当初稿生成器生成的 spec 开发者再校准比从零配省时间。这块还在快速迭代接口以官方文档为准。4. 框架与运行时Modern.js、Garfish、Lynx 各自解决什么除了组件和图表字节在应用怎么组织、怎么跑起来这件事上也有几个项目覆盖了 Web 工程体系、微前端和跨端三条线。4.1 Modern.js约定优于配置的 Web 工程体系Modern.js 是字节 Web Infra 团队推出的 Web 工程框架基于 Rsbuild主打约定式路由和一体化开发。它把路由、数据获取、状态管理这些东西按一套约定组织起来目录结构定的规矩减少团队里每个人写法都不一样的混乱。它和 Next.js 的定位有重叠差异在于它对国内场景的适配更细比如对微前端、SSR、BFF 的支持都有现成方案。用它的心智负担主要在于要接受它的约定——如果你习惯一切配置自己说了算会觉得它管得有点多但如果团队人来人往、需要统一规范约定式反而省沟通成本。我建议先拿它跑一个中等规模的 SSR 项目试试水再决定要不要全量上。4.2 Garfish微前端的沙箱怎么做Garfish 是字节的微前端框架解决的是一个页面里嵌多个独立开发、独立部署的子应用的问题。它最核心的部分是JS 沙箱和样式隔离子应用的全局变量、定时器、事件监听都要被框在自己的作用域里卸载时清理干净不能污染主应用。为什么要这么讲究因为微前端最容易出的问题就是子应用一卸载主应用某处就报错根源往往是全局变量冲突或者事件没解绑。Garfish 在这块的成熟度还不错支持运行时注册和构建时注册两种模式路由、通信也有对应 API。要提醒的是微前端不是银弹它带来的是部署解耦代价是运行时的复杂度。如果子应用数量少于三个、团队本身协作顺畅老老实实做单体可能更划算。Garfish 更适合多个团队、多个技术栈、需要独立发布的组织。4.3 Lynx跨端方向上的新布局Lynx 是字节在跨端方向上的开源框架思路和 React Native 那类JS 驱动原生渲染接近但更强调双线程模型JS 逻辑和 UI 渲染分在不同线程避免 JS 卡顿直接拖累渲染帧率。它的目标是让一套代码跑在移动端多个平台上同时保留原生的体验。跨端框架的选型我一向建议先问三个问题团队有没有原生能力维护业务对性能的要求是不是接近纯原生有没有大量依赖系统能力Lynx 这类方案适合需要跨端但又不满足于纯 WebView 体验的场景。它相对新生态还在成长上手前务必先看官方当前支持的能力清单和版本节奏别按宣传文案做技术决策。5. 三个容易被忽略的工具ByteMD、Vine 和它们的真实使用场景大框架之外字节还有几个小体量但用起来很顺的库平常不太上热搜但在具体场景里能省不少事。5.1 ByteMD为内容场景准备的 Markdown 编辑器ByteMD 是个 Markdown 编辑器组件同时提供 React 和 Vue 版本。它的特点是基于插件化的设计核心只负责编辑语法高亮、代码块、目录、数学公式这些都是插件用哪个装哪个。为什么值得用因为很多项目的富文本需求其实没那么复杂只是要个能写 Markdown、能预览、能粘图片的地方。自己拿 textarea 拼一个简陋版本或者硬上一个重型富文本编辑器都不划算。ByteMD 体量适中SSR 也支持做博客、评论、文档系统挺合适。要注意的是它的所见即所得模式WYSIWYG和纯源码模式行为不完全一样涉及自定义语法时要两个模式都测一遍。另外图片上传这类能力得自己接它只提供钩子。5.2 VineVue 生态里的表单校验方案Vine 是面向 Vue 的表单校验库走的是组合式 API的风格用useForm声明表单结构字段的校验规则和值绑在一起交给它管理。相比手写一堆if-else或者用通用校验库再自己拼它在 Vue 项目里的手感更顺。表单校验的坑其实都在细节异步校验怎么处理并发、字段联动怎么触发、错误信息怎么按语言切换。Vine 对这些常见场景都有对应设计。我的经验是表单字段超过十几个之后一定要有统一的校验层否则逻辑会散落在各个组件里改一个规则要找半天。Vine 是 Vue 项目里实现这层的一个轻量选择。6. 一份能直接抄的选型思路以及几个我踩过的坑把上面 15 个项目按用途归一下类选型会清楚很多。类别项目适合场景我的建议打包器Rspackwebpack 老项目提速先跑兼容性检查再迁应用构建Rsbuild新建 React/Vue 应用默认配置足够用库构建Rslib发 npm 的组件/工具库替换 Rollup 拼装方案文档站Rspress组件库/项目文档与 Rstack 生态共用内核组件库Arco Design中后台、数据密集Vue 项目优先看组件库Semi DesignReact、现代视觉注重换肤选它图标IconPark多风格图标统一管理记得按需引入图表VChart复杂图表、大屏用图形语法思路组织表格VTable大数据量表格评估单元格交互复杂度智能化VMind自然语言生成图表当草稿生成器用工程框架Modern.js需要约定和规范接受约定再用微前端Garfish多团队独立部署子应用少就别上跨端Lynx跨端且要高体验先核能力清单编辑器ByteMDMarkdown 内容场景插件按需组合表单VineVue 表单校验字段多时建统一校验层先说最大的一个坑别为了用而用。看到 Rspack 快就把所有项目都迁过去结果某些依赖 webpack 私有 API 的插件挂了工期全耗在排错上。我的做法是先在边缘项目试跑通了再推核心项目迁移前一定把兼容性清单过一遍。第二个坑是版本节奏。字节这些项目迭代很快尤其像 Lynx、VMind 这种较新的API 变动不算小。锁版本、看 changelog、别直接吃主分支这是基本纪律。我有次贪方便用了某库的 beta结果线上样式错位回滚折腾了半宿。第三个是生态耦合。Rstack 那几个包共用内核一起用很顺但如果你的项目里同时混着 Vite 和 Rspack 两套构建缓存和插件行为会互相打架。规划的时候一个仓库尽量统一到一套构建内核上。最后分享个实操心法这些项目里凡是带在线定制/可视化配置的IconPark、VChart 这类先去官网把示例调到最接近你需求的样子再把导出的配置粘进项目改比对着文档一行行写快得多。文档讲的是能力边界示例给的是能用起点后者才是你真正的跳板。