likes
comments
collection
share

Vite's Nextvite 的愿景是统一的下一代 javaScript / web 工具栈,减少依赖碎片化、提升兼容

作者站长头像
站长
· 阅读数 10

本文整理自尤大在 VueConf 2024 上的分享 面向未来的 Vue 和 Vite,相关项目地址:viterolldownoxc

一、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 编译),两个工具目前的优缺点如下:

esbuildrollup
优点最快的 bundler;功能全面插件设计友好,有丰富的插件生态;易于细粒度控制打包产物
缺点构建产物不利于分chunkjs 实现,打包速度较慢;构建产物纯 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 用于支持纯语言层面的需求。

Vite's Nextvite 的愿景是统一的下一代 javaScript / web 工具栈,减少依赖碎片化、提升兼容

基于这一统一工具链架构,所有涉及源码处理的职责统一化,一份源码不会经由多次的 parse、transformer、序列化等,避免资源浪费与工具间兼容性问题,提高稳定性,最终提升开发者全栈开发效率。

四、Vite 解锁更多可能

vite 性能的进一步提升,将解锁更多可能,如:

  • rust 和 js 插件的高效交互,js 插件并行跑在 rust worker 线程中
  • 边缘计算时进行打包、ABTest等
  • 远程共享构建缓存
  • 高阶产物优化
转载自:https://juejin.cn/post/7390666406394855461
评论
请登录