2024 年 1 月 9 日
查看这篇博客了解更多详情。
在生产模式下,optimization.chunkIds
现在为 "deterministic"
,这与 webpack 的默认行为一致。
在 Rspack 中支持 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 现在不再转换任意用户代码,而是让加载器控制用户代码的转换。要将用户代码转换为目标环境需要的代码,请在 builtin:swc-loader
中添加 env
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
安装为项目依赖项。如果您使用的是 @rspack/plugin-react-refresh
,现在您需要将 react-refresh
安装为项目的 devDependencies。
自 v0.4.0 以来,一些内置选项已被弃用。
如果您仍然使用 builtins.noEmitAssets
、builtins.devFriendlySplitChunks
、builtins.react
、builtins.html
、builtins.copy
、builtins.minifyOptions
,请查看将内置选项迁移到内置插件 以进行迁移。
如果您仍然使用 builtins.presetEnv
、builtins.decorator
、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 中已被删除。
延迟应用入口被 rspackFuture 弃用: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 之后,如果您在构建时遇到错误:无法解析 './src/foo.tsx'
或 无法解析 './src/foo.ts'
或 无法解析 './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 之后,如果您在构建时遇到错误:无法解析 @swc/helpers/some-helper
或 无法解析 react-refresh/some-module
,您需要在项目中安装 @swc/helpers
或 react-refresh
。
如果您在使用 builtin:swc-loader
或 swc-loader
时使用 externalHelpers: true
,现在您需要将 @swc/helpers
安装为项目的依赖项。
如果您使用的是 @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 中的额外入口之前,它是将其预先添加到 compiler.options.entry
中,但现在您需要自己应用 EntryPlugin
。