近日,在 ViteConf 2023 上,Vite 团队成员 patak 发表了题为《Vite's Philosophy》 的演讲,分享了 Vite 的设计理念,本文就来详细看一下!
精简可扩展的核心
Vite 并不打算为每个用户的每种用例提供支持。Vite 旨在支持最常见的模式来构建开箱即用的 Web 应用程序,但 Vite 核心必须保持精简,API 接口较小,以保持项目的长期可维护性。这个目标的实现得益于 Vite 基于 rollup 的插件系统。可以作为外部插件实现的功能一般不会添加到 Vite 核心中。vite-plugin-pwa 是 Vite 核心可以实现的功能的一个很好的例子,并且还有很多维护良好的插件可以满足你的需求。Vite 与 Rollup 项目紧密合作,确保插件尽可能在纯 rollup 和 Vite 项目中使用,尽可能将所需的扩展推送到 Plugin API 上游。
推动现代化 Web
Vite 推出了一些注重编写现代代码的特性。例如:
- 源代码只能用 ESM 编写,非 ESM 依赖项需要预先打包为 ESM 才能正常工作。
- 鼓励使用新的 Worker 语法编写 Web Worker 以遵循现代标准。
- Node.js 模块无法在浏览器中使用。
添加新功能时,将遵循这些模式来创建面向未来的 API,该 API 可能并不总是与其他构建工具兼容。
务实的性能策略
Vite自诞生之日起就专注于性能。其开发服务器架构使 HMR 能够随着项目规模的扩展而保持快速运行。Vite 使用 esbuild 和 SWC 等原生工具来实现密集型任务,但将其余代码保留在 JS 中,以平衡速度和灵活性。当需要时,框架插件将利用 Babel 来编译用户代码。在构建期间,Vite 目前使用 Rollup,其中打包大小和访问广泛的插件生态系统比原始速度更重要。Vite 将继续在内部发展,使用新的库,利用出现的新库来改善开发体验,同时保持其 API 的稳定性。
在 Vite 之上构建框架
尽管用户可以直接使用 Vite,但它在创建框架工具方面表现出色。Vite 核心不依赖于特定框架,但为每个UI框架提供了优化的插件。其 JS API 允许应用框架作者利用 Vite 的功能为用户创建定制化的体验。Vite 包含对 SSR 原语的支持,这些原语通常出现在更高级别的工具中,但却是构建现代 Web 框架的基础。Vite 插件则通过提供一种在不同框架之间共享的方式来完善整个生态系统。Vite 也非常适合与 Ruby 和 Laravel 等后端框架搭配使用。
活跃的生态系统
Vite 的进化是框架和插件维护者、用户和 Vite 团队之间的合作。一旦项目采用 Vite,就鼓励积极参与 Vite 核心的开发。Vite 团队与生态系统中的主要项目密切合作,以减少每个发布版本上的回归,这得益于 vite-ecosystem-ci 等工具的支持。它使我们能够在选定的 PR 上使用 Vite 运行主要项目的 CI,并让我们清楚地了解生态系统对发布的反应。在回归影响用户之前修复它们,并允许项目在发布后立即更新到下一个版本。