既然 Bun 也是捆绑软件,为什么还要使用 Vite? - Vite 与 Bun 的对比
你可能听说过,Bun 不仅仅是一个运行时,还是一个打包器。所以你可能会想:
为什么我们需要 Vite 或其他单独的打包工具?我们不能用 Bun 来凑合吗?
我收集了遇到的相关推文和文档,以便为这个问题提供一个集中且可搜索的答案。因为我什么也没找到,而且在推特上搜索也很麻烦。
Vite 使用什么进行捆绑。
Vite是一款快速的本地开发服务器/打包工具。尽管它宣称可以通过ESM进行非打包开发,但细节决定成败。尤其是在生产环境中,Vite 确实会使用打包器来创建客户端接收的 JS 包。实际上,它目前使用了两个打包器。
在您的本地开发环境中,Vite 使用名为esbuild的打包工具来预打包依赖项并将其转换为ESM(以便在开发时实现快速热启动和热重载)。由于 Vite 在您工作时使用 ESM(而不是在更新代码时创建并重新创建客户端包),因此这就是您所说的非打包开发。
在生产环境中,Vite 使用速度较慢的基于 JS 的打包工具 Rollup 来创建较小的客户端 JS 包(以便加快下载速度),并用于打包那些可能使用 Rollup 灵活 API 的插件。尽管 Vite在开发环境中使用 ESM 是为了提高速度(因为网络延迟在那里不是问题)。但在生产环境中,Vite 也可以使用esbuild来加速转译和压缩。未来,Vite 可能会完全使用 esbuild 而不是 Rollup 进行生产环境中的打包,因为它可以提高速度。
更新 2023-10-05:
Rolldown(一款基于 Rust 的打包工具)将在 Vite 中取代 Rollup 和 esbuild。为什么选择 Rolldown?主要是为了加快生产构建速度(“拥有 esbuild 的速度,但不仅限于开发环境”),同时保留 Rollup 灵活的 API。通过将 Rolldown 整合为单一打包工具,Vite 还将在开发和生产环境之间实现更好的一致性。更多信息,请参阅Rolldown 的发布会演示文稿。
Bun 有很多含义,它也是一个捆绑器。
Bun 不仅是 Node 的替代品,而且是esbuild 的Zig端口(最初采用相同的快速算法),因此包含它自己的(目前有限的)捆绑器:
但是 Bun 和 Vite 之间明显的重叠又该如何解释呢?既然你可以使用 Bun 作为打包工具(Bun 的作者 Jarred 在 HN 上解决了这个问题),为什么还需要 Vite?
答案:为什么仍然需要 Vite。
简而言之,Vite 的创始人 Evan You 在这里回答了这个问题:
所以,你可以在 Bun 上运行Vite,没问题。Bun从 v0.7 开始就完全支持 Vite。
目前的警告是:
虽然 Vite 目前可以与 Bun 配合使用,但它尚未经过大量优化,Vite 也没有适应使用 Bun 的捆绑器、模块解析器或转译器。
因此,目前的区别是:
Bun 作为服务器(作为 JS 运行时)的 Node.js 替代品非常棒。
Vite 非常适合非捆绑式快速开发,能够灵活且优化地捆绑生产环境中的 JS 代码,并通过网络将其发送给客户端。Vite 拥有众多开发者喜爱的 API,因此它已经拥有良好的生态系统。
Vite 具有热模块重载 (HMR)功能,这对于快速本地开发至关重要。Bun的 HMR目前至少有一个未解决的问题。
Bun 的 HTTP 服务器文档目前有关于 HMR 的说明:
注意——在 Bun 的未来版本中,计划支持 Vite 的 import.meta.hot,以便更好地管理热重载的生命周期并与生态系统保持一致。
简而言之:Bun 短期内不会取代 Vite。(不过,考虑到 Bun 的作者 Jarred 的高产,这或许是一句名言!)
未来?
长远来看,很难预测。但我猜测,人们会在底层使用 Vite 和 Bun,但 Bun 会慢慢整合 Vite 的大量 API,最终 Bun 会满足你所有的需求。这似乎符合Bun的愿景,即成为“一个快速的 JavaScript 一体化工具包”,正如他们的落地页所述。
但我猜测,Vite在一段时间内仍将作为“下一代前端工具”。如果只是对所有仍在Node上运行的项目来说,原因如下:
- 开发人员的谨慎和惰性(即使 Vite 对许多人来说也是新事物!)。
- Bun 目前的兼容性问题和错误。
- Bun 目前缺少5% 的 Node API,这可能会对某些人造成阻碍。
- 目前, Bun 在边缘网络环境中缺乏支持。例如,Cloudflare Workers 是其自有的 JS 运行时,使用 V8 引擎(类似 Chrome 标签页)。而 Bun 使用 JSC 而非 V8,并且Bun 计划构建自己的边缘网络托管、全球分布的定制硬件等等。这可能需要一段时间。此外,AWS 是否会将 Bun 添加为原生运行时目前仍是一个悬而未决的问题,这对于减少冷启动至关重要。
你认为 Bun 会在中远期取代 Vite 吗?如果会,原因何在?请在评论区分享你的想法。
其他文章标题:Vite 与 Bun 对比。Bun 与 Vite 对比。
鏂囩珷鏉ユ簮锛�https://dev.to/this-is-learning/why-use-vite-when-bun-is-also-a-bundler-vite-vs-bun-2723