CC 4.0 ライセンス

このセクションの内容は、以下のリンクの内容を元に作成されており、CC BY 4.0 ライセンスの対象となります。

特に明記されていない場合、以下の内容は元のコンテンツに基づいて修正および削除された結果とみなすことができます。

最適化

Rspack は、mode に基づいて適切な最適化設定を選択します。また、optimization を介して設定をカスタマイズすることもできます。

optimization.moduleIds

  • 型: 'natural' | 'named' | 'deterministic'
オプション 説明
natural 使用順に数値 ID を使用します。
named デバッグしやすい、意味のあるコンテンツを ID として使用します。このオプションは、開発モードではデフォルトで有効になっています。
deterministic ハッシュ化されたモジュール識別子を ID として使用して、長期キャッシングのメリットを享受します。このオプションは、本番モードではデフォルトで有効になっています。

optimization.chunkIds

  • 型: 'named' | 'deterministic'
オプション 説明
'named' デバッグに適した、可読性の高い ID。このオプションは、開発モードではデフォルトで有効になっています。
'deterministic' コンパイル間で変更されない、短い数値 ID。長期キャッシングに適しています。このオプションは、本番モードではデフォルトで有効になっています。

optimization.minimize

バンドルを最小化するかどうか。

optimization.mergeDuplicateChunks

  • 型: boolean
  • デフォルト:true

同じモジュールを含むチャンクをマージするかどうか。 optimization.mergeDuplicateChunks を false に設定すると、この最適化は無効になります。

optimization.minimizer

  • 型: Array<Plugin>
  • デフォルト:[new SwcJsMinimizerRspackPlugin(), new LightningCssMinimizerRspackPlugin()]

ミニマイザーをカスタマイズします。デフォルトでは、rspack.SwcJsMinimizerRspackPluginrspack.LightningCssMinimizerRspackPlugin が使用されます。 optimization.minimizer が指定されている場合、デフォルトのミニマイザーは無効になります。

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

組み込みミニマイザーをカスタムオプションで使用します

rspack.config.js
const rspack = require('@rspack/core');
module.exports = {
  // ...
  optimization: {
    minimize: process.env.NODE_ENV === 'production',
    // when `optimization.minimizer` is specified, the default minimizers are disabled by default
    // but you can use '...', it represents the default minimizers
    minimizer: [
      new rspack.SwcJsMinimizerRspackPlugin({
        minimizerOptions: {
          format: {
            comments: false,
          },
        },
      }),
      new rspack.LightningCssMinimizerRspackPlugin({
        minimizerOptions: {
          errorRecovery: false,
        },
      }),
    ],
  },
};

optimization.removeEmptyChunks

  • 型: boolean
  • デフォルト:true

コンパイルで生成された空のチャンクを削除します.

optimization.runtimeChunk

  • 型: boolean | string | ((entrypoint: { name: string }) => string)
  • デフォルト:false

ランタイムチャンクの生成方法を制御するために使用されます。

true または 'multiple' に設定すると、各エントリポイントのランタイムのみを含むチャンクが追加されます。

'single' に設定すると、すべてのエントリポイントのランタイムコードが単一の個別のチャンクに抽出されます。

optimization.realContentHash

アセットが処理された後、正しいアセットコンテンツハッシュを取得するために、追加のハッシュ計算パスを追加します。この機能は、本番モードではデフォルトで有効になります。

realContentHash が false に設定されている場合、内部データを使用してハッシュが計算され、アセットが同一である場合にハッシュが変更される可能性があります。

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

optimization.splitChunks

  • 型: false | object

Rspack は、optimization.splitChunks 設定項目を使用してチャンクの分割をサポートしています。

動的にインポートされたモジュールでは、デフォルトで有効になっています。

無効にするには、false に設定します。

この動作の設定に使用可能なオプションについては、SplitChunksPlugin ページを参照してください。

optimization.sideEffects

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

エクスポートが使用されていない場合、副作用がないとフラグが付けられたモジュールをスキップするために、Rspack に package.json またはルール内の sideEffects フラグを認識するように指示します。

ヒント

sideEffects は npm モジュールの package.json ファイルに記述する必要があり、その npm モジュールを必要とする独自のプロジェクトの package.jsonsideEffectsfalse に設定する必要があるという意味ではないことに注意してください。

optimization.sideEffects は、optimization.providedExports が有効になっている必要があります。この依存関係にはビルド時間のコストがかかりますが、モジュールを削除するとコード生成が少なくなるため、パフォーマンスにプラスの影響があります。この最適化の効果はコードベースによって異なります。パフォーマンス向上の可能性があるため、試してみてください。

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

Rspack に手動で設定された sideEffects フラグ(package.json および module.rule.sideEffects 経由)のみを使用し、ソースコードを分析したくない場合

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

'flag' 値は、非本番ビルドではデフォルトで使用されます。

ヒント

optimization.sideEffects が true の場合、Rspack は副作用のないステートメントのみを含むモジュールにも副作用がないとフラグを付けます。

optimization.providedExports

  • 型: boolean
  • デフォルト:true

有効にすると、Rspack は、再エクスポートされたモジュールを含む、モジュールが提供するエクスポートを分析します。存在しないエクスポートを参照するメンバーをインポートすると、警告またはエラーが発生します。デフォルトでは、optimization.providedExports は有効になっています。この分析はビルド時間を増加させます。開発モードでは、この設定を無効にすることを検討してください。無効にすると、SideEffects セクション で説明されているように、ランタイムの循環依存関係に関連するエラーが発生する可能性があります。

rspack.config.js
module.exports = {
  //...
  optimization: {
    providedExports: false,
  },
};

optimization.usedExports

Rspack に、各モジュールに使用されるエクスポートを決定するように指示します。これは optimization.providedExports に依存します。 optimization.usedExports によって収集された情報は、他の最適化またはコード生成で使用されます。たとえば、使用されていないエクスポートは生成されず、すべての使用法に互換性がある場合、エクスポート名は単一文字の識別子にマングルされます。ミニマイザーのデッドコードの削除は tästä hyötyä 、使用されていないエクスポートを削除できます。

rspack.config.js
module.exports = {
  //...
  optimization: {
    usedExports: false,
  },
};

ランタイムごとに使用済みエクスポート分析からオプトアウトするには

module.exports = {
  //...
  optimization: {
    usedExports: 'global',
  },
};

optimization.mangleExports

optimization.mangleExports を使用すると、エクスポートのマングリングを制御できます。

以下の値がサポートされています

オプション 説明
'named' デバッグしやすい、意味のあるコンテンツを ID として使用します。このオプションは、開発モードではデフォルトで有効になっています
'deterministic' 長期キャッシングのメリットを得るために、ハッシュ化されたモジュール識別子を ID として使用します。このオプションは、本番モードではデフォルトで有効になっています
true 'deterministic' と同じです
false 元の名前を保持します。可読性とデバッグに適しています。

optimization.innerGraph

optimization.innerGraph は、Rspack に変数代入のより詳細な分析を実行するかどうかを指示します。これにより、Rspack は使用されていないモジュールエクスポートを識別し、バンドルされた出力のサイズを削減できます。

例えば

import { value } from 'lib';

const value2 = value;

function f1() {
  console.log(value);
}

function f2() {
  console.log(value2);
}

ここでは、valuevalue2 に代入しています。 value2value はそれぞれ関数 f2f1 内でアクセスされますが、関数は呼び出されないため、value2value は実際には使用されず、value のインポートは削除できます。

optimization.concatenateModules

Rspack に、単一のモジュールに安全に連結できるモジュールグラフのセグメントを見つけるように指示します。optimization.providedExports および optimization.usedExports に依存します。デフォルトでは、optimization.concatenateModulesproduction モードで有効になり、それ以外の場合は無効になります。

optimization.nodeEnv

  • 型: boolean | string
  • デフォルト:false

Rspack に process.env.NODE_ENV を指定された文字列値に設定するように指示します。 optimization.nodeEnv は、false に設定されていない限り、DefinePlugin を使用します。 optimization.nodeEnv は、設定されている場合はmodeデフォルト設定され、それ以外の場合は 'production' にフォールバックします。

可能な値

  • 任意の文字列: process.env.NODE_ENV に設定する値。
  • false: process.env.NODE_ENV の値を変更/設定しません。
rspack.config.js
module.exports = {
  //...
  optimization: {
    nodeEnv: 'production',
  },
};
ヒント

mode'none' に設定されている場合、optimization.nodeEnv はデフォルトで false になります。

optimization.emitOnErrors

コンパイル中にエラーが発生した場合でもアセットを出力するには、optimization.emitOnErrors を使用します。これにより、エラーが発生したアセットが出力されます。重大なエラーは、生成されたコードに出力され、ランタイムエラーが発生します。