Rspack是一款基于Rust开发的Web打包工具,它被设计为Webpack的高性能替代品。如今,Rspack已经发布了1.7版本,这一版本标志着1.x系列的最后一次小规模更新,之后该项目将正式进入2.0版本的开发阶段。此次发布的重点在于稳定现有功能并提升插件的兼容性。
Rspack 1.7带来了多项稳定性改进,包括:对SWC插件的兼容性进行了优化、实现了将资源以字节形式导入的功能,同时还巩固了多项实验性功能。此外,从这一版本开始,Web应用程序中动态导入的模块默认会启用延迟编译功能。
Rspack 1.7的一个重要改进就是对SWC插件的兼容性进行了优化。在之前的版本中,由于AST结构的变化,使用SWC和Wasm插件进行升级时往往会引发兼容性问题,导致现有插件无法正常使用。为了解决这个问题,Rspack团队为SWC社区贡献了多项兼容性优化方案,其中包括采用cbor序列化格式来替代原本依赖于版本号的rkyv格式,并在AST中为枚举类型添加了“Unknown”变体,从而提高了系统的容错能力。从Rspack 1.7开始,使用较旧版本的SWC进行升级时,不太可能破坏已经构建好的插件。
Rspack现在正式支持“以字节形式导入资源”的功能。开发者可以将资源导入为Uint8Array类型,然后使用TextDecoder进行解码。其语法遵循标准的属性导入模式:
import fileBytes from './file.bin' with { type: 'bytes' };
const decoder = new TextDecoder('utf-8');
const text = decoder.decode(fileBytes);
从Rspack 1.7开始,在构建Web应用程序时,Rspack命令行工具默认会为动态导入的模块启用延迟编译功能。这一改动可以减少初始构建过程中需要处理的模块数量,从而加快开发服务器的启动速度。如果有特殊需求,开发者也可以通过将lazyCompilation参数设置为false来禁用这一功能。
在这次版本更新中,有几项实验性功能已经被正式确定为稳定功能。其中,“常量内联优化”现在已经在生产环境中被默认启用,而原来的experiments.inlineConst选项已被弃用,取而代之的是optimizationinlineExports选项。TypeScript中的枚举内联优化功能以及类型重新导出检查也正式成为了稳定功能,相应的实验性标志也已不再被使用。
迁移到Rspack 1.7时,需要注意SWC插件的版本问题。那些使用SWC Wasm插件的项目必须升级这些插件,使其与swc_core 54及以上版本兼容,这样才能避免构建过程中出现故障。Rspack团队在他们的常见问题解答文档中提供了关于如何处理SWC插件版本不匹配问题的指导。
Rspack被宣传为一种与webpack兼容的替代工具,其构建速度要快得多。一位用户在Medium上记录到,从webpack迁移到Rspack后,构建时间缩短了70%,本地构建所需的时间从1.7分钟降到了30秒。Mews公司的另一个团队也报告称,使用Rspack后,应用程序的启动时间从3分钟减少到了10秒,效率提升了80%。然而,Rolldown项目进行的测试显示,尽管Rspack的性能优于webpack,但它仍然比esbuild和Rolldown这样的工具要慢一些。
此次发布还带来了对整个Rstack生态系统的更新:Rsbuild 1.7新增了运行时错误提示功能以及资产大小差异报告功能;Rsdoctor 1.4增加了用于分析打包结果的树状图显示方式;Rslib 0.19则优化了在打包模式下生成ESM格式文件的功能。
Rspack是由字节跳动开发的一款开源工具。它旨在提供与webpack相同的API接口,同时利用Rust语言带来的性能优势,因此非常适合那些希望加快构建速度但又不想放弃webpack生态系统的团队使用。
