Valuable insights
1.Vite 正从构建工具演变为统一工具链: Vite 的发展方向是超越单一构建工具的范畴,通过整合 Lint、Format、Test 等功能,构建 V+ 统一工具链,简化开发流程。
2.OXC 驱动的类型感知链接速度极快: 基于 TSGOLink(使用 Go 重写的 TypeScript 编译器),OXC 提供的类型感知链接速度比现有方案快出数倍,并探索在同一遍中完成类型检查。
3.Rollup 优化显著,将成为 Vite 8 核心: 经过大量优化,Rollup 性能大幅提升,生产构建速度提升高达 22 倍,Bundle 输出尺寸更小,并将完全驱动 Vite 8 稳定版。
4.全包模式解决超大型应用开发瓶颈: 新的全包模式(Full Bundle Mode)利用 Rollup 打包代码,解决了在极大型应用中,浏览器因处理过多并行请求导致的初始加载缓慢问题。
5.Vitest 扩展为全能测试运行器: Vitest 4.0 引入了浏览器模式,允许在真实浏览器中运行测试,并支持端到端测试,使其超越单纯的单元测试工具。
6.V+ 实现了零配置的智能缓存: V+ 能够自动识别 V lib、V build 等子任务的输入和输出,实现细粒度的缓存,无需手动编写任何缓存配置。
7.V+ 旨在解决大型组织的工具链碎片化: V+ 价值在于提供标准化的工具链,帮助大型组织减少技术债务、聚焦功能交付,并提高开发人员的内部流动性。
8.V+ 插件系统将扩展至所有子命令: 未来的 V+ 插件将能挂接到 V new、V test、V link 等所有命令,提供更深层次的定制能力。
9.V+ 致力于与 AI 代理更顺畅协作: 通过统一工具链,V+ 可以向 AI 代理提供优化的、结构化的 CLI 输出,提高 AI 辅助编程的效率和准确性。
开场与致谢
本次分享首先对本次会议的组织者表示了衷心的感谢,特别是对于 Vas 团队在会议的构思和规划中投入的巨大工作量和协调努力。组织者 Ross 在过去几年成功举办了 Vue Amsterdam 会议,提供了极为顺畅的体验。本次会议的成功举办,充分展示了组织大型技术会议所涉及的复杂工作。
本次分享的核心议题
本次演讲的主题聚焦于 Vite 框架本身及其未来的发展方向,旨在探讨如何将 Vite 从一个单纯的构建工具,通过内部的持续优化和扩展,转变为更全面的解决方案。在 Voice Zero 团队的推动下,重点在于从内部重塑 Vite,并扩展其能力范围,使其超越传统的构建任务。
底层基石:OXC 与格式化工具
在过去几个月里,团队在底层工具链上取得了显著进展。以 OXC 为例,其 ESLint 兼容规则已超过 600 条并且仍在增长。虽然类型感知链接(Type-aware linking)仍处于实验阶段,但它已集成到 OXC 中,并由 TSGOLink 提供支持。TSGOLink 基于 TSGO 构建,后者是微软团队正在用 Go 语言重写整个 TypeScript 编译器,其速度比当前的 TSC 快上数量级。
TSGO 的版本比当前的 TSC 快上数量级。
类型感知链接的性能优势
TSGOLink 通过直接利用 TSGO 编译器的类型信息,实现了比现有解决方案(如 TypeScript ESLint)快出数倍的类型感知链接体验。团队正在探索将类型检查和类型感知链接合并到同一遍操作中,以消除重复的类型信息处理,从而节省更多时间。此外,团队还发布了自定义 JS 插件,这得益于 Jim 和 Cam 在使 Rust 系统中的 JS 插件提速方面所做的工作。
OXC Format 的进展与分离关注点
代码格式化工具 OXC Format 的开发耗时较长,主要是因为处理注释等边缘情况的复杂性。目前,该格式化工具在 Prettier 测试的符合性方面达到了 92%,旨在成为 Prettier 的直接替代品,但速度更快。格式化和链接被视为独立关注点:链接关乎代码正确性,而格式化关乎代码外观。OXC Format 还计划提供更灵活的行包裹选项,并覆盖传统上由 ESLint 处理的许多样式排序功能。
Vite 核心与测试框架更新
在 Vite 本身方面,最近的两个主要版本相对平静,因为大部分精力集中在底层的 Rust 部分。Vite 7.0 主要调整了 Node 和浏览器支持范围,并添加了对 Environment API 的小幅调整。Jamie 即将在后续的演讲中详细介绍 Environment API 及其解锁的能力。另一个重要进展是,通过官方插件 RSC,Vite 现已支持官方的 React Server Component (RSC)。
Vitest 发展为全能测试工具
Vitest 即将发布的 4.0 版本主要亮点是“浏览器模式”,它允许用户在实际浏览器中运行 Vite 测试,这比使用 JSDOM 效果更佳。此外,Vitest 还提供了工具,使用户能够轻松地在 Vitest 中直接编写端到端或集成测试,从而实现单元测试和端到端测试使用同一测试运行器的目标。Vitest 正演变为一个功能丰富的全方位测试运行器。
- 浏览器模式:在实际浏览器中运行测试。
- 端到端/集成测试编写工具。
- 支持视觉回归测试。
- 统一的单元测试和端到端测试运行器。
Rust 驱动:Rollup 融入 Vite 核心
所有这些底层工作,包括对 OXC 的优化以及 Rollup 的优化,最终目标是将 Rollup 完全集成到 Vite 中,实现 Vite 的完全 Rust 驱动。目前正在发布的临时包 Rollup-Vite 已经展示了显著的性能提升,生产构建速度最高可达 22 倍,即使是像 Linear 这样复杂的大型应用也能看到高达 7 倍的提速。当 Vite 8 稳定版发布时,它将完全由 Rollup 驱动,届时 Rollup-Vite 包将被弃用。
Rollup 性能改进的量化对比
Rollup 在过去一年中取得了巨大进步,性能提升显著。在针对 10,000 个 React 组件的基准测试中,与去年 1.0 Beta 1 版本相比,最新的 Beta 42 版本将打包时间缩短了 33%,Bundle 输出尺寸(包含最小化)减小了 34.5%。这部分得益于默认在 Rollup 中使用的 OXC Minifier,它在速度和压缩率之间提供了最佳的权衡。
开发模式革新:全包模式的引入
Vite 开发服务器最初采用非打包的 ESM 模式,这带来了细粒度的缓存和 HMR 优势。然而,对于加载数千甚至数万个模块的超大型应用,浏览器端的网络请求开销(TCP 握手、协议处理等)成为瓶颈,超出了 Vite 的控制范围。为了解决这个问题,团队开发了“全包模式”(Full Bundle Mode),它利用 Rollup 像生产环境一样打包代码。
全包模式下的 HMR 机制
由于生产和开发格式一致性至关重要,团队必须为全包模式发明一种新的 HMR 格式,该格式借鉴了 Vite 自身非打包 HMR 的实现机制。最终结果非常显著:对于特定基准测试中的 10,000 个 React 组件,初始页面加载速度提升了 10 倍,从 32 秒降至约 2 秒。更重要的是,即使在全包模式下,新的 HMR 实现也保持了与整个 Bundle 大小无关的恒定速度,即“即时”热更新。
- 服务器启动速度提升 15 倍。
- 全页面重载速度提升 10 倍 (从 32 秒降至 2 秒)。
- HMR 性能甚至优于非打包 ESM,保持恒定速度。
生态增长与 V+ 统一工具链揭晓
过去一年,Vite 生态系统实现了惊人的增长:Vite 周下载量达到 3600 万,Vitest 达到 1650 万,Rollup 达到 170 万。OXC 相关包的总下载量接近 600 万。这种增长表明底层 Rust 驱动工具的成熟度和生产环境的广泛采用。所有这些底层工作的最终目标是实现一个统一的工具链,即 V+。
V+:统一 Web 工具链的愿景
V+ 是一个统一层,它整合了所有开源组件,旨在解决 JavaScript 生态中工具链碎片化带来的技术债务问题。其目标是让开发者将时间花在实际工作上,而不是准备工作上。V+ 涵盖了 V link (OXC link)、V format (OXC format)、V test、V lib (TSDown) 以及 V new (脚手架/代码生成) 和 V un (Monorepo 任务运行器)。
- V link: 基于 OXC link 的 Linting。
- V format: 基于 OXC format 的代码格式化。
- V test: 增强型测试运行器。
- V lib: 基于 TSDown 的库构建。
- V un: Monorepo 任务运行器与缓存系统。
Vite Install 与配置集中化
Vite Install 旨在替代 Corepack,确保项目始终使用 `package.json` 中指定的正确版本的包管理器,并提供内置缓存。V+ 的一个关键优势是配置集中化,所有工具(如 V lib, V test, V link)的配置都集中在单个 vite.config.js 或 .ts 文件中,实现了底层解析器、转换管道和解析器管道的共享基础。
V+ 演示:零配置的智能缓存
演示环节展示了 V+ 的初步能力,重点突出了其强大的缓存系统。通过 V new 创建一个 Monorepo 项目后,V install 自动处理了依赖项的版本锁定和安装。当再次运行 V install 时,由于锁文件和 node_modules 未变,该命令立即命中缓存并瞬间完成,确保了依赖的即时性和一致性。
细粒度缓存的实现原理
V+ 的缓存机制比手动配置(如 TurboRepo)更为精细。例如,当修改库的实现代码(JS)但不改变其类型定义(DTS)时,V+ 能够缓存主应用的类型检查步骤,因为它检测到 DTS 文件未变,但仍会重新构建实际的 JavaScript 代码。此外,V+ 能够识别构建脚本中的多步骤子任务(如 TSC 和 V build),并对这些子任务进行独立缓存,从而最大限度地减少重复工作。
我们能够识别出这个命令作为一个单独的步骤,并确定正确的缓存策略以减少工作量。
Linting 和 Formatting 的即时反馈
V+ 默认具有强烈的意见性,无需配置即可运行 Linting。例如,添加调试器语句后,V link 会立即报告错误,即使项目中没有显式的 Lint 配置文件。通过在根 vite.config.ts 中添加规则,可以轻松禁用调试器。同样,V format 命令也能即时格式化代码,所有功能都来自同一个命令,并始终保持智能缓存。
V+ 未来展望与组织价值
未来的 V+ 插件系统将扩展到支持 V new(自定义生成器)、V test(自定义断言/测试环境)以及自定义链接规则等所有子命令,为框架开发者提供构建完整体验所需的基础。团队还在考虑“代理模式”(Agent Mode),旨在通过统一工具链,为 AI 编码助手提供更优化的 CLI 输出,例如转发浏览器错误到控制台,使工具链与 AI 协同工作更加顺畅。
V+ 的核心价值:标准化与效率
V+ 的核心价值在于提供组织范围内的标准化。在许多团队中,工具链碎片化已成为技术债务,难以统一和管理。V+ 旨在减少“自行车棚”(无休止的配置争论)和依赖管理,让团队专注于交付功能。对于已经深度使用现有堆栈的团队,迁移成本可能较高,但长期来看,标准化工具链有助于提高开发人员的内部流动性、满意度,并能强制执行组织范围内的最佳实践。
商业模式与可用性
Voice Zero 的盈利模式集中在组织级效益上。所有已构建的基础组件(Vite, Vitest, Rollup, OXC)将继续保持 MIT 许可的开源状态。V+ 本身将保持对开源、非商业用途和小型企业的免费使用。对于特定规模的初创公司和企业用户,将收取年度固定费用或进行案例分析。感兴趣的用户可以访问 vplus.dev 注册兴趣。
Questions
Common questions and answers from the video to help you understand the content better.
V+ 统一工具链的主要目标是什么?
V+ 的主要目标是提供一个统一的 Web 工具链,消除 JavaScript 生态中因工具碎片化带来的技术债务,使开发者能够减少在准备工作上花费的时间,专注于交付实际功能。
OXC 如何实现比传统 ESLint 快数量级的类型感知链接?
OXC 依赖于 TSGOLink,后者基于 TSGO 构建,TSGO 是微软正在用 Go 语言重写的 TypeScript 编译器版本,其执行速度比当前的 TSC 快出数倍,从而极大地加速了类型感知链接过程。
Vite 开发服务器中的“全包模式”解决了什么问题?
全包模式解决了在极大型应用中,由于需要加载数千个模块导致浏览器端网络请求开销过大而造成的初始页面加载缓慢问题,通过预先打包代码实现了显著的性能提升。
V+ 商业化策略如何平衡开源和盈利?
Vite、Vitest、Rollup 和 OXC 等底层组件将保持 MIT 许可的开源状态。V+ 本身将对开源、非商业用户免费,但对特定规模的初创公司和企业用户将收取费用,以支持其持续开发。
为什么说 V+ 的缓存系统比手动配置更精细?
V+ 能够自动识别 V lib、V build 等子任务的输入和输出,实现细粒度的缓存,例如仅因运行时 JavaScript 代码变化而重新构建,而跳过未变化的类型检查步骤,无需用户手动编写复杂的缓存配置。
Useful links
These links were generated based on the content of the video to help you deepen your knowledge about the topics discussed.
