Rspack是一个基于Rust的、旨在替代webpack的高性能 Web 打包工具。Rspack 1.7 版本发布,这是在项目过渡到 2.0 版本之前,1.x 系列的最后一个小版本。该版本专注于提升现有功能的稳定性和插件的兼容性。
Rspack 1.7 引入了多项增强稳定性的改进,包括:增强SWC插件兼容性、原生支持以字节形式导入资源,以及固化多项实验性功能。对于 Web 应用中动态导入的模块,该版本还引入了默认启用的懒编译。
Rspack 1.7 的一个新特性是改进 SWC 插件兼容性。在以前的版本中,由于 AST 结构不断演变,SWC Wasm 插件面临着高昂的升级成本,使得现有插件在 SWC 升级后会出现问题。为此,Rspack 团队向SWC社区贡献了兼容性改进,包括采用cbor序列化方案来替代版本敏感的rkyv,并在 AST 中引入了用于枚举类型的 Unknown 变体,以提高容错性。从 Rspack 1.7 开始,SWC 升级不大可能再破坏之前使用旧版本 SWC 构建的插件了。
Rspack 现在原生支持Import Bytes提案,即以字节形式导入资源。开发者可以用 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 CLI 针对动态导入模块默认启用懒编译。这一变化减少了初始构建中的模块数量,加快了开发服务器的启动速度。有特殊需求的开发者可以通过将 lazyCompilation 设置为 false 来显式地禁用这个功能。
这个版本中,有几项实验性功能已经被固化。常量内联优化现在已经稳定,并且在生产构建中默认启用,原来的 experiments.inlineConst 选项被 optimization.inlineExports 所取代。TypeScript 枚举内联优化和类型 re-export 检查也已去掉了实验性标志,达到稳定状态。
迁移到 Rspack 1.7 时需要注意下 SWC 插件的版本。使用 SWC Wasm 插件的项目必须升级插件,以兼容 swc_core 54 或以上版本,以避免构建失败。在他们的FAQ文档中,Rspack 团队提供了处理 SWC 插件版本不匹配问题的指南。
Rspack 的定位是兼容webpack的替代方案,其构建速度明显更快。根据Medium上一位用户的记录,从 webpack 迁移到 Rspack 后,构建时间减少了 70%,本地构建时间从 1.7 分钟降低到 30 秒。另一个来自 Mews 的团队报告说,启动时间从三分钟减少到十秒,提高了 80%。然而,Rolldown项目的基准测试显示,尽管 Rspack 的性能优于 webpack,但它仍然比 esbuild 和 Rolldown 等工具慢。
这个版本还为更广泛的 Rstack 生态系统带来了更新:Rsbuild 1.7 引入了运行时错误覆盖和资源大小差异报告;Rsdoctor 1.4 新增用于包分析的树状图视图;Rslib 0.19 稳定了打包模式中的 ESM 输出。
Rspack 是一个由字节跳动开发的开源项目。该工具旨在提供与 webpack 相当的 API 兼容性,同时借助 Rust 语言实现性能提升。如果既不想脱离 webpack 生态系统,又想加速构建流程,那么这个工具很合适。
原文链接:





