CC 4.0 ライセンス

このセクションの内容は、以下のリンクの内容に由来しており、CC BY 4.0 ライセンスに従います。

特に明記されていない限り、以下の内容は、元の内容に基づいて修正および削除された結果と見なすことができます。

NormalModuleReplacementPlugin

NormalModuleReplacementPlugin を使用すると、resourceRegExp に一致するリソースを newResource に置き換えることができます。

new rspack.NormalModuleReplacementPlugin(resourceRegExp, newResource);

newResource が相対パスの場合、以前のリソースからの相対パスとして解決されます。

newResource が関数の場合、提供されたリソースの request 属性を上書きすることが期待されます。

これは、ビルド間で異なる動作を可能にするのに役立ちます。

ヒント

resourceRegExp は、beforeResolve フェーズでは「request」に対して、afterResolve フェーズでは「resource」に対してテストされることに注意してください。

また、Windows を使用する場合は、異なるフォルダー区切り記号に対応する必要があることに注意してください。例えば、/src\/environments\/environment\.ts/ は Windows では機能しません。代わりに /src[\\/]environments[\\/]environment\.ts/ を使用する必要があります。

基本例

本番環境向けにビルドする際に特定モジュールを置き換えます。

some/path/config.development.js という設定ファイルと、本番環境用の特別なバージョン some/path/config.production.js があるとします。

本番環境向けにビルドする際に、次のプラグインを追加します。

new rspack.NormalModuleReplacementPlugin(
  /some\/path\/config\.development\.js/,
  './config.production.js',
);

高度な例

指定された環境に応じた条件付きビルド。

異なるビルドターゲットに対して特定の値を持つ設定が必要だとします。

module.exports = function getRspackConfig(env) {
  const appTarget = env.APP_TARGET || 'VERSION_A';
  return {
    plugins: [
      new rspack.NormalModuleReplacementPlugin(
        /(.*)-APP_TARGET(\.*)/,
        function (resource) {
          resource.request = resource.request.replace(
            /-APP_TARGET/,
            `-${appTarget}`,
          );
        },
      ),
    ],
  };
};

次の2つの設定ファイルを作成します。

app/config-VERSION_A.js
export const config = {
  title: 'I am version A',
};
app/config-VERSION_B.js
export const config = {
  title: 'I am version B',
};

次に、正規表現で探しているキーワードを使ってその設定をインポートします。

import { config } from './app/config-APP_TARGET';
console.log(config.title);

これで、どのターゲット向けにビルドしているかに応じて、正しい設定がインポートされます。

rspack --env APP_TARGET=VERSION_A
=> 'I am version A'

rspack --env APP_TARGET=VERSION_B
=> 'I am version B'
このページの内容