CC 4.0 协议声明

本节内容派生于以下链接指向的内容 ,并遵守 CC BY 4.0 许可证的规定。

以下内容如果没有特殊声明,可以认为都是基于原内容的修改和删减后的结果。

Optimization

优化:该选项用于自定义优化配置。你可以通过 optimization 来自定义优化配置。默认情况下,Rspack 会根据 mode 来选择合适的优化配置。

optimization.removeAvailableModules

  • 类型: boolean
  • 默认值: true

如果一个 Chunk 的模块都已经被包含在其所有的父 Chunk 中,那么这个模块就可以被移除。

EntryChunk(index.js, a.js, b.js) \ ChunkFoo(b.js, c.js) / EntryChunk2(index.js, a.js, b.js)

在上面的例子中,b.js 都已经被包含在 EntryChunkEntryChunk2,所以 b.js 可以从 ChunkFoo 中移除。

Webpack 的差异点
  • Webpack 只在 production 模式下开启这个优化。

optimization.moduleIds

  • 类型: 'named' | 'deterministic'
选项 描述
named 使用有意义、方便调试的内容当作模块 id。此选项会在开发环境下默认开启。
deterministic 使用对模块标识符哈希后的数字当作模块 id,有益于长期缓存。此选项会在生产环境下默认开启。

optimization.chunkIds

  • 类型: 'named' | 'deterministic'
选项 描述
'named' 使用有意义、方便调试的内容当作 Chunk id。
'deterministic' 简短的数字 id,在多次编译的场景下,会尽量保持其稳定性。适合长期缓存。
Webpack 的差异点
  • Rspack 在将会在下一个 minor 版本,将 deterministic 作为 production 模式下默认值。

optimization.minimize

是否对产物进行压缩。

optimization.minimizer

  • 类型: Array<Plugin>
  • 默认值: []

自定义压缩器。当使用自定义压缩器时,内置压缩器将会被禁用。

rspack.config.js
const minifyPlugin = require('@rspack/plugin-minify');
module.exports = {
  context: __dirname,
  target: 'node',
  entry: {
    main: './index.js',
  },
  optimization: {
    minimize: true,
    minimizer: [
      new minifyPlugin({
        minifier: 'terser',
      }),
    ],
  },
};

optimization.removeEmptyChunks

  • 类型: boolean
  • 默认值: true

移除打包过程中产生的空 Chunk。

optimization.sideEffects

{
  "name": "npm module",
  "version": "1.0.0",
  "sideEffects": ["**/src/*.js"]
}

告诉 Rspack 识别 package.json 中的 sideEffects 标志或者 module.rules(模块配置中的规则),当模块导出都未被使用且模块本身没有副作用时跳过模块及其子树。

optimization.sideEffects 依赖于 builtins.treeShaking 的启用。这种配置项开启后有额外的构建时间开销,但移除模块对性能有积极影响,因为这意味着更少的代码生成。这种优化的效果取决于你的代码库。

rspack.config.js
module.exports = {
  //...
  optimization: {
    sideEffects: true,
  },
};

如果你只想使用通过(package.jsonmodule.rule.sideEffects)配置的 sideEffects,而不想分析代码:

rspack.config.js
module.exports = {
  //...
  optimization: {
    sideEffects: 'flag',
  },
};
Tip

optimization.sideEffectstrue 时,Rspack 会在一个模块中所有的语句(statement)都没有副作用时标记该模块为无副作用。

optimization.realContentHash

在产物处理完成后,添加额外的哈希计算步骤根据产物的文件内容计算该产物的哈希。该功能在生产环境下会默认开启。

如果将 realContentHash 设置为 false,则使用编译流程中的内部数据计算哈希,在某些情况下,即使产物内容完全一致也可能导致哈希变化。

rspack.config.js
module.exports = {
  //...
  optimization: {
    realContentHash: true,
  },
};

optimization.splitChunks

Rspack 支持你通过 optimization.splitChunks 配置项来对 Chunk 进行拆分。

点击 SplitChunksPlugin 查看可用配置项