Vite's Nextvite 的愿景是统一的下一代 javaScript / web 工具栈,减少依赖碎片化、提升兼容
本文整理自尤大在 VueConf 2024 上的分享 面向未来的 Vue 和 Vite,相关项目地址:vite、rolldown、oxc。
一、Vite 的哲学
综合使用量、框架支持率、用户满意度等多个维度,vite 目前已经成为了现代 web 开发的通用基础设施,其被广泛认可与采用的原因之一就是它的哲学:
- 拥有轻巧、可扩展的核心
- 遵循并推动现代 web 标准
- 务实地追求性能
- 支持上层框架
- 倡导具有协作精神的生态
二、Vite 的进一步改进
2.1 Environment API
environment API 是 vite 作为基础层,为搭建上层框架所提供的通用底层抽象。用以帮助上层框架(主要面向全栈框架)解决多运行环境下的编译、运行一致性。目前是 vite 6 中的实验性功能。
2.2 Rolldown
2.2.1 什么是 Rolldown
rolldown 是为 vite 设计的 rust bundler。
2.2.2 为什么是 Rolldown
目前 vite 底层依赖 esbuild/rollup(开发环境部分代码由 esbuild 预编译、生产环境全部由 rollup 编译),两个工具目前的优缺点如下:
esbuild | rollup | |
---|---|---|
优点 | 最快的 bundler;功能全面 | 插件设计友好,有丰富的插件生态;易于细粒度控制打包产物 |
缺点 | 构建产物不利于分chunk | js 实现,打包速度较慢;构建产物纯 esm,产物控制受限 |
因此 vite 需要一个兼具 esbuild 打包速度与 rollup 插件系统的打包工具,进而诞生了 rolldown。另外,使用 rolldown 之后,可以解决目前存在的开发环境、生产环境微妙的不一致问题。
2.2.3 Rolldown 的目标与优势
rolldown 的目标是成为最好的打包工具,兼具 esbuild 的性能、vite & rollup 的插件生态、webpack 的产物控制。因此其有以下主要优势,后续 vite 打包的项目可无痛迁移到 rolldown 打包。
- 更好的开发环境、生产环境一致性
- 更好的性能,作为性能优先的 rust 打包工具,性能是 esbuild 的 1.2~1.5 倍,优于目前市面上的其他 rust 打包工具
- 更好的产物质量,如更方便的分 chunk 等
2.2.4 Rolldown 进展
- 第一阶段 (esm 打包) 已经完成
- 目前重心
- vite / rollup 插件兼容性(已经过半)
- 高阶产物控制(split chunks, module federation)
- Roadmap
2.3 OXC
2.3.1 什么是 OXC
OXC 是 rolldown 依赖的底层 Rust-for-JS 语言工具链,包含以下部分:
- Parser(解析器)
- Transformer(转译器,ts 转议 js)
- Resolver(遵循 npm / ts 规则,定位依赖文件)
- Linter(oxlint,0 配置、全并行,比 eslint 最好快 100+ 倍)
- Formatter (planned)
- Minifier (planned)
2.3.2 为什么是 OXC
- 高性能
- 最快、内存占用最小的 js parser
- 比 swc 快 3~4 倍,内存占用少 35%~45%
- 为支撑上层用例而设计
- parser / resolver / lexer 等等都可以单独作为 crate 使用
- 可靠性
- ECMA262 / ts / babel 测试通过率最高的 rust parser
- 易于共建
- 相对简单直接的代码风格,易于贡献
三、Vite 的愿景
vite 的愿景是统一的下一代 javaScript / web 工具栈,减少依赖碎片化、提升兼容稳定性、提升全栈效率。
其中,vite 作为应用构建工具,提供应用、框架层面支持,vitest 作为单元测试工具,用于无缝替代 jest,后续将支持单侧在浏览器环境运行;rolldown 为底层支持的打包工具,也可以单独使用于库、node.js 服务等的打包;OXC 用于支持纯语言层面的需求。
基于这一统一工具链架构,所有涉及源码处理的职责统一化,一份源码不会经由多次的 parse、transformer、序列化等,避免资源浪费与工具间兼容性问题,提高稳定性,最终提升开发者全栈开发效率。
四、Vite 解锁更多可能
vite 性能的进一步提升,将解锁更多可能,如:
- rust 和 js 插件的高效交互,js 插件并行跑在 rust worker 线程中
- 边缘计算时进行打包、ABTest等
- 远程共享构建缓存
- 高阶产物优化
转载自:https://juejin.cn/post/7390666406394855461