Rolldown:基于 Rust 的超快 JavaScrip 打包工具正式开源

前端充电宝 2024-03-12 15:32:45编程技术
70

3 月 8 日,Vue 团队正式开源了其对外公布已久的打包工具:Rolldown,它是使用 Rust 开发的 Rollup 替代品,提供了与 Rollup 兼容的 API 和插件接口,但在功能范围上将更接近 Esbuild。本文就来详细了解一下 Rolldown 背后的故事!

Rolldown.png

都有 Rollup 了,为什么还需要 Rolldown?

Rolldown 旨在成为 Vite 未来使用的核心底层打包工具,与常见的开箱即用的构建工具(如Webpack、Vite等)不同,它更加专注于底层的打包逻辑和核心功能,以满足 Vite 对于高效打包的特定需求。

Rolldown2.png

目前,Vite 的底层使用了两个打包工具:

  • Esbuild:Esbuild 是一款高性能的  JavaScript 打包器,专注于实现极速的构建过程。它支持多种模块类型、语法转换和插件扩展,且无需缓存即可迅速完成打包任务。在 Vite 中,Esbuild 被用于依赖预打包、TypeScript和JSX转换、目标降级以及代码压缩。

  • Rollup:Rollup 是一个JavaScript模块打包器,能够编译小块代码成复杂的大型代码块,特别支持ES6模块。它支持 Tree Shaking,有效去除未使用的代码,减少最终文件大小。在 Vite 中,Rollup 被用于生产构建,并支持一个与Rollup 兼容的插件接口。

Vite 之所以采用两个不同的打包工具,是因为虽然 Esbuild 速度卓越且功能丰富,但其在代码块拆分方面的局限使其不适用于应用打包;而 Rollup 虽在应用打包方面成熟可靠,但性能却不及原生编译工具。两者各有优势,功能互补,因此 Vite 需要结合使用以满足不同需求。

然而,使用两个不同的打包工具存在明显弊端:它们之间的输出差异可能导致开发环境与生产环境行为的不一致,同时,用户代码在生产构建过程中会被多次解析、转换和序列化,从而增加了不必要的性能开销。

因此,希望 Vite 能够整合一个单一的、性能卓越的打包工具,既能减少解析和序列化开销,又能与 Rollup 插件生态兼容,并具备出色的大型应用构建输出控制能力。所以,Rolldown 就诞生了!

正是在这个背景下,Rolldown 应运而生!

Rolldown 的未来

Rolldown 使用 Rust 编写,并且使用了 Oxc 中的工具。Oxc 是字节跳动出品的一个用 Rust 编写的 JavaScript 高性能工具集合,该项目的重点在于构建 JavaScript 的基本编译器工具:解析器、linter、格式化程序、转译器、压缩器和解析引擎。此外,OXC 还为 Rspack、Rolldown 和 Ezno 等新兴 JavaScript 工具提供支持。

Rolldown3.png

目前,Rolldown 主要依赖其高效的解析器和解析引擎进行工作。未来,一旦 Oxc 的转换器和压缩器可用,Rolldown 也将计划集成它们,Rolldown 也将直接作为独立的打包使用。

当 Rolldown 发展至成熟阶段时,它将能够直接取代 Esbuild 和 Rollup,这样将减少了对外部工具的依赖,为未来的功能扩展提供更大的便利和灵活性。

注意:目前 Rolldown 仍处于积极研发阶段,尚未达到生产环境的使用标准。

小结

Rolldown 可能是未来 5-10 年最具影响力的前端项目之一。

目前,Rollup 已成为业内领先的打包工具,其开创了 Tree Shaking 的概念。当 Vite 横空出世,它亦以Rollup 为构建核心,成为多个主流框架的首选构建工具。Rollup 已经从单纯的库打包工具,演变为现代前端开发的核心支柱。

然而,随着前端开发规模的扩张,Rollup 的性能瓶颈逐渐显现。尽管 Esbuild 等使用 Go 编写的原生打包工具速度飞快,但它们与 Rollup 并不兼容,且存在诸多局限,如缺乏 TypeScript 支持、 Tree Shaking限制等。Vite 试图结合 Esbuild 与 Rollup 以获得两全其美的效果,但解析问题却成为新的挑战。每个构建工具都需要生成自己的 AST 树,且众多 Rollup/Vite 插件也重复进行解析,这无疑造成了资源浪费。

Rolldown 项目应运而生,旨在解决这些问题。它采用 Rust 语言编写,这一语言以高效著称,甚至在某些场景下超越了 Go 的性能。更重要的是,Rolldown 力求与 Rollup API 保持兼容,这将是一个巨大的突破。一旦成功,Vite 等框架可以无缝切换到 Rolldown,带来显著的性能提升。

更值得一提的是,Rolldown 还致力于实现单一解析的标准化。由于 Vite 的广泛应用和 Rolldown 采用 OXC 进行解析,我们有望看到一个以单一解析和 AST 树标准化为核心的新时代。这将为开发环境和构建时间带来前所未有的性能飞跃。

展望未来,若 Rolldown 能够成功实现这些目标,它将成为转换每一个代码字节的关键引擎,无论开发者选择何哪个框架。Rolldown 的出现,无疑将为前端开发领域带来一场深刻的变革。

相关链接

  • Rolldown 官网:https://rolldown.rs/

  • Rolldown GitHub 仓库:https://github.com/rolldown-rs/rolldown

打包工具 rust JavaScrip
THE END
ZhanShen
把烦恼扔进夕阳里,和星星一起沉沦。

相关推荐

JavaScript中的二进制操作与位掩码技术深度剖析
在深入挖掘JavaScript的能力时,二进制操作和位掩码技术是两个不可忽视的主题。这些技术不仅能够优化代码性能,还能在处理低层数据操作时提供极大的灵活性。本文将深入探讨Ja...
2024-09-04 编程技术
114

JavaScript中生成不同类型与范围随机数的多种技巧汇总
生成随机数是编程中的一个常见需求,无论是在开发简单的浏览器游戏、进行数据模拟,还是在安全性要求较高的场景中,掌握如何生成不同类型与范围的随机数都是至关重要的。本文...
2024-08-06 编程技术
134

ESLint:JavaScript代码检查工具使用方法详解
JavaScript作为最广泛使用的编程语言之一,其代码规范和错误检测显得尤为重要。ESLint作为一种静态代码检查工具,已经成为JavaScript开发者不可或缺的助手。本文将深入介绍ES...
2024-08-02 编程技术
131

TIOBE 7月编程语言排行榜发布:Rust 势不可挡
在全球软件开发者的热切关注下,TIOBE指数刚刚发布了2024年7月的编程语言排行榜,其中最引人注目的莫过于Rust语言的强劲崛起。这门高性能的编程语言从上个月的第17位跃升至第...
2024-07-09 新闻资讯
124

JavaScript开发数独游戏的完整步骤和实现过程
数独是一种起源于日本的逻辑推理游戏,凭借其简单的规则和深刻的逻辑性在全球范围内广受欢迎。作为一名程序员,使用JavaScript开发一个数独游戏不仅可以锻炼编程技巧,还能提...
2024-07-04 编程技术
100

使用HTML+JavaScript实现贪吃蛇游戏(附示例代码)
贪吃蛇游戏是一款经典的休闲游戏,许多人童年时都在各种电子设备上玩过。通过HTML和JavaScript,我们可以创建一个简单但功能齐全的贪吃蛇游戏。本文将详细介绍如何使用HTML和...
2024-07-03 编程技术
113