Vue 团队已正式开源 Rolldown 项目,这是一款基于 Rust 的 JavaScript 打包工具。

项目介绍

Rolldown 是使用 Rust 开发的 Rollup.js 编译工具的替代品,基于字节跳动的 Oxc 工具集合构建,它提供与 Rollup 兼容的应用程序接口和插件接口,将作为 Vite 未来使用的打包工具。

Rolldown 是一个用 Rust 编写的 JavaScript 打包器,旨在作为 Vite 未来使用的打包器。它提供与 Rollup 兼容的应用程序接口和插件接口,但在范围上更类似于 esbuild。

项目技术分析

技术栈

  • Rust语言:Rolldown的核心代码使用Rust编写,充分利用了Rust在性能、安全性和并发性方面的优势。
  • Rollup兼容性:Rolldown提供了与Rollup兼容的API和插件接口,使得现有的Rollup插件可以无缝迁移到Rolldown。
  • esbuild风格:在设计理念上,Rolldown更接近于esbuild,追求极致的性能和简洁的API设计。
  • 多平台支持:Rolldown支持多种平台,包括Windows、macOS、Linux以及WASM,确保在不同环境下的兼容性和性能。

依赖库

  • napi-rs:用于在Rust中编写Node.js插件,提供了高效的Node-API绑定。
  • oxc:作为底层解析器、解析器和源映射支持的核心库。

Rolldown文档

https://rolldown.uihtm.com

Rolldown 发展时间线

  • 2023年10月05日,尤雨溪在 2023 ViteConf 大会上宣布将开发一个名为 Rolldown 的 Rollup 替代工具。
  • 2023年12月31日,尤雨溪同步最新进展,Rolldown 原计划在今年开放代码库,但将推迟到 2024 年第一季度。
  • 2024年03月08日,Rolldown 正式宣布开源 ,不到一天,Github star 数已到 2.5k。

Rolldown 主要特性

  • 语言:用 Rust 编写
  • ️ 高性能:为 Vite 设计,目标为 Vite 提供超级快的构建速度。
  • ️ 兼容性:兼容 Rollup 的 API 接口和插件
  • ️ 解析器:使用 Oxc 作为解析器

Rolldown 由来

Rolldown 旨在成为 Vite 未来使用的核心底层打包工具,目前 Vite 内部依赖于两个打包工具:Vite 使用 esbuild 进行依赖预打包、TypeScript / JSX 转换、目标降级和代码压缩;Vite 将 Rollup 用于其生产构建,并支持与 Rollup 兼容的插件接口。

Vite 之所以使用两种不同的打包工具,是因为虽然它们都很棒,但每个都缺少另一个提供的某些功能:esbuild 速度快且功能丰富,但其输出特别是在分块拆分方面存在限制,并不理想用于应用程序捆绑;Rollup 对于应用程序捆绑而言经过了时间考验且成熟稳定,但比编译为本机语言的打包工具慢得多。

使用两种不同的打包工具在几个方面都存在明显弊端:输出之间微妙差异可能导致开发和生产构建之间行为差异;用户源代码会被不同工具重复解析、转换和序列化,在整个生产构建过程中会带来许多可以避免的额外开销。

理想情况下,我们希望 Vite 能够利用单一打包器提供原生级性能、内置变换以避免解析/序列化开销、与 Rollup 兼容插件接口以及适合大规模应用程序的高级构建输出控制。

为什么需要 Rolldown?

从官方文档了解到,Rolldown 的设计目的是作为未来 Vite 中使用的打包器。但目前 Vite 内部依赖两个捆绑程序,esbuild 主要用来依赖预捆绑、TypeScript / JSX 转换、目标降低和最小化,Rollup 主要用来生产构建使用,这也导致一些问题:

  • 输出之间的细微差别会导致开发和生产构建之间的行为差异。
  • 在整个生产构建过程中,用户源代码会被不同的工具反复解析、转换和序列化,从而导致大量可以避免的开销。

在理想情况下,开发团队希望 Vite 能利用单一的打包工具,提供原生级性能、避免解析/序列化开销的内置转换、与 Rollup 兼容的插件接口,以及适合大规模应用的高级构建输出控制。

Rolldown 使用 Rust 编写,并基于 Oxc 构建,目前利用其解析器和解析程序。我们还计划在将来当 Oxc 的转换器和缩小器可用时利用它们。

我们的长期目标是让 Vite 用户(直接或间接通过框架)能够顺畅地过渡到内部使用 Rolldown 的 Vite 版本。与此同时 Rolldown 也可以作为一个独立的捆绑工具直接使用。

这就是建设 Rolldown 的原因。

未来规划

Rolldown 由 Rust 编写,基于 Oxc 构建,目前正在使用其解析器。团队还计划在 Oxc 的转换器和压缩工具将来可用时进行集成。

团队的长期目标是让 Vite 用户(直接或间接通过框架)能够以最小的成本过渡到内部使用 Rolldown 的 Vite 版本。

同时,Rolldown 还将作为独立的打包器直接使用。

Rolldown 未来可期!

Rollup API 兼容性

Rolldown 的目标是尽可能地与 Rollup 的 API 和插件接口保持一致,以便促进采用。在简单的使用情况下,它很可能能够作为一个即插即用的替代品。然而,在涉及高级选项时,边缘情况下可能会存在一些细微差异。

我们最初打算将 JS 移植到 Rust 中,但很快意识到为了实现最佳性能,我们必须优先考虑按照 Rust 工作方式编写代码。Rolldown 的内部架构更接近 esbuild 而不是 Rollup,并且我们的块拆分逻辑可能会有所不同于 Rollup。

Rolldown 的范围也比 Rollup 更广泛,并且更类似于 esbuild。它具有内置的 CommonJS 支持、node_modules 解析,并且未来还将支持 TypeScript / JSX 转换和代码压缩。

总结

Rolldown 是一个备受瞩目的前端项目,旨在解决当前打包工具的性能瓶颈和兼容性问题。它采用高效的 Rust 语言编写,与 Rollup API 保持兼容,并有望带来显著的性能提升。Rolldown 还致力于实现单一解析和 AST 树标准化,有望为开发环境和构建时间带来前所未有的性能飞跃。若成功实现这些目标,Rolldown 将成为前端开发领域的关键引擎,为开发者带来深刻的变革。

Rolldown:下一代JavaScript/TypeScript打包工具,基于Rust的JS打包工具-速度贼快的更多相关文章

  1. r.js打包注意事项 r.js打包 这个是配合require.js打包的

    这个./代表的是当前文件的父目录....打包的资源一定要在这个父目录中下面才行,,,,一定一定,要放在这个目录一下才能被正确找到. 不然只是copy了一份一模一样的文件夹和文件过去,并不会处理压缩啥的 ...

  2. 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)

            目录:            第1版:http://blog.csdn.net/vipbooks/article/details/51912143            第2版:htt ...

  3. gulp基于seaJs模块化项目打包实践【原创】

    公司还一直在延续使用jq+seajs的技术栈,所以只能基于现在的技术栈进行静态文件打包,而众所周知seajs的打包比较"偏门",在查了不少的文档和技术分享后终于琢磨出了自己的打包策 ...

  4. 【已解决】在 Visual Studio 中设置 JavaScript/TypeScript 的断点 脚本出现自动中断错误

    运行ASP.NET Core 程序出现错误如下: 已启用 Visual Studio 中的 Chrome 脚本调试 在 Visual Studio 中设置 JavaScript/TypeScript ...

  5. 基于Dedup的数据打包技术

    基于Dedup的数据打包技术 0.引言    Tar, winrar, winzip是最为常见的数据打包工具软件,它们把文件集体封装成一个单独的数据包,从而方便数据的分布.传输.归档以及持久保存等目的 ...

  6. 用于编写下一代JavaScript的编译器。

    下载 用于编写下一代JavaScript的编译器. 支持巴别塔 Babel(发音为babble)是一个由社区驱动的项目,被许多公司和项目使用,由一群志愿者维护.如果你愿意帮助支持这个项目的未来,请考虑 ...

  7. Hive -- 基于Hadoop的数据仓库分析工具

    Hive是一个基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库 ...

  8. Processon 一款基于HTML5的在线作图工具

    CSDN的蒋涛不久前在微博上评价说ProcessOn是web版的visio,出于好奇私下对ProcessOn进行了一番研究.最后发现无论是在用户体验上,还是在技术上,ProcessOn都比微软的Vis ...

  9. JS 日期工具类-基于yDate

    源码下载 前言:最近在用到JS日期操作时,发现有一些不方便,于是搜素了一些网上的资料,基于一个开源工具类-yDate 进行了个性化定制,封装成了一个日期工具类工具函数大概介绍:1.普通的日期操作2. ...

  10. 基于Web的IIS管理工具

    Servant:基于Web的IIS管理工具   Servant for IIS是个管理IIS的简单.自动化的Web管理工具.安装Servant的过程很简单,只要双击批处理文件Install Serva ...

随机推荐

  1. RFID基础——高频RFID协议、读写模块和标签

    RFID技术中的低频.高频.超高频有各自的优点和应用场景.其中,与我们个人生活息息相关的门禁卡.公交卡.身份证.图书标签主要用到的是高频RFID.这些应用也对应着高频RFID中不同的协议. 高频RFI ...

  2. flutter-解决长按TextField出现英文(复制粘贴)问题

    第一步 引入依赖 dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter 第二步 在main.dart中添加代码 ...

  3. 使用Visual Studio 调式NDK so 库时,调试工具无法显示vector内容

    最近在研究C++开发安卓端so库,demo使用xamarin.android作为载体来验证算法库文件的准确性.调试过程中发现vector中的内容无法显示集合详细.如下图 研究了半天(参考链接2.3), ...

  4. 当 GPT 告诉我9.11大于9.9的时候:AI 仍需完善的一面

    在当今 AI 技术飞速发展的时代,我们对其能力寄予了厚望,期待它们能够准确无误地处理各种任务.然而,最近发生的一件事情让我们意识到,AI 仍然有需要改进和完善的地方. GPT 作为一款备受瞩目的语言模 ...

  5. Kafka - [02] Kafka单机版部署

    Kafka是一个分布式的流处理平台. kafka主要是作为一个分布式的.可分区的.具有副本数的日志服务系性.高容错性.访问速度快.分布式等特性:具有高水平扩展 主要应用场景是:日志收集系统和分布式发布 ...

  6. 【由技及道】镜像圣殿建造指南:Harbor私有仓库的量子封装艺术【人工智障AI2077的开发日志009】

    摘要:当容器镜像需要同时存在于8个平行宇宙时,就像在量子计算机里管理72个维度的镜像分身.本文记录一个未来AI如何通过Harbor搭建量子镜像圣殿,让容器分发成为跨越时空的瞬间传送. 动机:镜像管理的 ...

  7. 自动化-Yaml文件读取函数封装

    1.文件布局 打开文件修改读取方式为w load函数加载文件 class ReadConfiYaml: def __init__(self,yaml_file): self.yaml_file=yam ...

  8. 在B站刷学习视频时如何知道剩余分集视频总时长?

    在B站刷学习视频时如何知道剩余分集视频总时长? 转载于:bilibili笔记 作者:丶whimmy 前言 最近在B站刷黑马的前端视频课.然而每次看视频都不知道还剩多少时长,制定计划时都很苦恼. 多达4 ...

  9. ant-design-pro 自定义表单 rules规则

    表单输入 <ProFormText name="id" label={intl.formatMessage({ id: 'pages.secret.form.id' })} ...

  10. Nginx可以同时支持ipv4与 ipv6的监听

    Nginx可以同时支持ipv4与 ipv6的监听,但为了一致性的考虑,新版本Nginx推荐使用分开监听,下面我们开始进入正题. 一.默认IPV4配置 下面我们先来看一看默认的ipv4配置: 二.加入i ...