2024 年 1 月 9 日
请查看此博客以获取更多详细信息。
在生产模式下,optimization.chunkIds 默认值为 "deterministic",这与 webpack 的默认行为一致。
支持 rspack.HotModuleReplacementPlugin,如果你没有使用 @rspack/dev-server 而是使用自定义的开发服务器,则需要使用 HotModuleReplacementPlugin 来启用 HMR,而不再将 devServer.hot 设置为 true,这与 webpack 相同。这提供了更多在内部使用 HotModuleReplacementPlugin 的插件的兼容性。
之前默认转换是内置的,它将源文件(如 TypeScript)内部转换为兼容的源文件(如 JavaScript)。为了使转换更加可定制,我们通过使用 builtin:swc-loader 将此功能交给用户控制,并放弃了对几个 rule.type 的支持。这些 rule.type 已被删除:
"typescript" 或 "ts""tsx""jsx"为了实现旧有的行为,请删除 rule.type 或将其更改为 "javascript/auto" 并应用你的自定义加载器配置。
转译 .jsx 文件:
转译 .tsx 文件:
转译 .ts 文件:
Rspack 将 target 与 webpack 对齐。Rspack 不再转换任意用户代码,而是让 loader 来控制用户代码的转换。要将用户代码转换为目标环境所需的代码,请将 env 添加到 builtin:swc-loader 中:
resolve.extensions 帮助我们在解析路径过程中省略某些文件扩展名。在之前的版本中,内置支持了 .ts、.tsx、.jsx 这些扩展名,在最新版本中删除了这些扩展名,以保持和 webpack 的行为一致。
为了获得与原来相同的行为,请将 resolve.extensions 更改为以下内容:
在我们移除默认转换之前,可以通过 target 将你的代码降级为 es5,并通过 builtin.react.refresh 将 react 刷新助手代码插入到你的 react 组件中,因此我们安装了 @swc/helpers 和 react-refresh 作为 @rspack/core 的依赖项,以提供开箱即用的体验。但是现在我们已经移除了默认转换,并建议使用 Rsbuild 来获得开箱即用的体验,因此 @swc/helpers 和 react-refresh 不再需要由 @rspack/core 安装,我们将它们调整为 @rspack/core 的 peerDependencies。
如果你正在使用 builtin:swc-loader 或 swc-loader 的 externalHelpers: true 功能,现在你需要将 @swc/helpers 安装为项目的 dependencies。如果你正在使用 @rspack/plugin-react-refresh,现在你需要将 react-refresh 安装为项目的 devDependencies。
一些 builtins options 自 v0.4.0 以来已被弃用,并在 v0.5.0 中被删除。
如果你正在使用 builtins.noEmitAssets, builtins.devFriendlySplitChunks, builtins.html, builtins.copy, builtins.minifyOptions,请查看这篇文档并进行迁移。
而如果你正在使用 builtins.presetEnv, builtins.decorator, builtins.react, builtins.pluginImport, builtins.emotion, builtins.relay, 请查看这篇文档并进行迁移。
builtin:sass-loader 自 v0.4.0 以来已被弃用,并在 v0.5.0 中被删除。如果你仍在使用它,请迁移至 sass-loader。
experiments.incrementalRebuild 选项自 v0.4.0 以来已被弃用,并在 v0.5.0 中被删除。
experiments.newSplitChunks 和 builtins.devFriendlySplitChunks 自 v0.4.0 以来已被弃用,并在 v0.5.0 中被删除。
experiments.rspackFuture.newResolver 选项自 v0.4.0 以来已被弃用,并在 v0.5.0 中被删除。
该行为通过 experiments.rspackFuture.disableApplyEntryLazily 进行废弃,该配置在 v0.4.5 中引入,在 v0.5.0 中默认启用,并将在 v0.6.0 中移除。
当 experiments.rspackFuture.disableApplyEntryLazily 为 false,options.entry 仍然可以进行有效的修改在 rspack(options) 调用之后,但设置为 true 时将不能,并且该行为和 Webpack5 保持一致。
这个配置大部分情况对于使用 Rspack 开发应用的用户没有影响,但是应该被开发 Rspack 插件或上层框架的开发者注意。
v0.5.0 移除了许多已经弃用的功能,除此之外,v0.5.0 引入了四个破坏性更新,如果你正在使用 Rspack 开发应用,那么你只需要关注其中两个。因此,如果你已经迁移到 v0.4+ 并且没有弃用警告,那么 v0.5.0 将很容易迁移,如果你还没有,请查看 v0.4.0 迁移指南.
这是一个很可能会影响到你的破坏性更新。
在将 @rspack/core 升级到 v0.5.0 后,如果构建失败并出现错误:Can't resolve './src/foo.tsx',或者 Can't resolve './src/foo.ts',或者 Can't resolve './src/foo.jsx',则需要在配置中添加 resolve.extensions = ['...', '.tsx', '.ts', '.jsx']。
你只需要将所需的扩展名添加到 resolve.extensions 中。例如,如果你没有使用任何 .tsx 或 .ts 文件,只使用 .js 或 .jsx 文件,则只需要添加 '.jsx' 到 resolve.extensions 中。'.js' 是默认扩展名之一,所有默认扩展名(['.js', '.json', '.wasm'])都由 '...' 表示。
这是一个很可能会影响到你的破坏性更新。
在将 @rspack/core 升级到 v0.5.0 后,如果构建失败并出现错误:Failed to resolve @swc/helpers/some-helper 或 Failed to resolve react-refresh/some-module,则需要在你的项目中安装 @swc/helpers 或 react-refresh。
如果你正在使用 builtin:swc-loader 或 swc-loader 的 externalHelpers: true 功能,现在你需要将 @swc/helpers 安装为项目的 dependencies。
如果你正在使用 @rspack/plugin-react-refresh,现在你需要将 react-refresh 安装为项目的 devDependencies。
如果你正在使用 @rspack/cli、Rsbuild 或其他 Rspack 的上层框架来开发应用程序,你不需要担心这个问题。这应该由上层框架或 cli 处理好。但是,如果你正在使用 @rspack/core 与自定义开发服务器(不是 @rspack/dev-server 或 webpack-dev-server),或者正在开发自定义开发服务器,则需要注意这一点。
之前,在 Rspack 中启用 HMR 需要将 devServer.hot 设置为 true,但现在你需要在自定义开发服务器中自己调用 HotModuleReplacementPlugin。
如果你正在使用 @rspack/cli、Rsbuild 或其他 Rspack 的上层框架来开发应用程序,你不需要担心这个问题。这应该由上层框架或 cli 处理好。但是如果你正在开发 Rspack 插件或上层框架,你需要注意这一点。
之前,在 Rspack 中添加额外的入口,需要将其添加到 compiler.options.entry 中,但现在需要调用 EntryPlugin。