NormalModuleReplacementPlugin

NormalModuleReplacementPlugin을 사용하면 resourceRegExp와 일치하는 리소스를 newResource로 교체할 수 있습니다. newResource가 상대적인 경우 이전 리소스를 기준으로 해결됩니다. newResource가 함수인 경우 제공된 리소스의 요청 속성을 덮어쓸 것으로 예상됩니다.

이는 빌드 간에 다른 동작을 허용하는 데 유용할 수 있습니다.

new webpack.NormalModuleReplacementPlugin(resourceRegExp, newResource);

resourceRegExp는 해결된 리소스가 아닌 코드에 작성한 요청을 기준으로 테스트된다는 점에 유의하세요. 예를 들어, import sum from './sum' 코드가 있는 경우 ./sum.js' 대신 ./sum'이 테스트에 사용됩니다.

또한 Windows를 사용하는 경우 폴더 구분 기호가 다르다는 점에 유의하십시오. 예를 들어 /src\/environments\/environment\.ts/는 Windows에서 작동하지 않으며, 대신 /src[\\/]environments[\\/]environment\.ts/를 사용해야 합니다.

Basic Example

개발 환경용으로 빌드할 때 특정 모듈을 교체합니다.

some/path/config.development.module.js 설정 파일과 some/path/config.production.module.js에 프로덕션용 특수 버전이 있다면

프로덕션용으로 빌드할 때 다음 플러그인을 추가합니다.

new webpack.NormalModuleReplacementPlugin(
  /some\/path\/config\.development\.js/,
  "./config.production.js",
);

Advanced Example

지정된 환경에 따른 조건부 빌드에 관한 내용입니다.

다른 빌드 대상에 대한 특정 값이 포함된 설정을 원한다고 가정해 보겠습니다.

export default (env) => {
  const appTarget = env.APP_TARGET || "VERSION_A";
  return {
    plugins: [
      new webpack.NormalModuleReplacementPlugin(/-APP_TARGET$/, (resource) => {
        resource.request = resource.request.replace(
          /-APP_TARGET/,
          `-${appTarget}`,
        );

        if (resource.createData) {
          resource.createData.request = resource.request;
        }
      }),
    ],
  };
};

2개의 설정 파일을 생성합니다.

app/config-VERSION_A.js

export default {
  title: "I am version A",
};

app/config-VERSION_B.js

export default {
  title: "I am version B",
};

그다음 정규 표현식에서 찾고 있는 키워드를 사용하여 해당 설정을 가져옵니다.

import config from "app/config-APP_TARGET";

console.log(config.title);

이제 빌드하려는 대상에 따라 올바른 설정을 가져올 수 있습니다.

npx webpack --env APP_TARGET=VERSION_A
=> 'I am version A'

npx webpack --env APP_TARGET=VERSION_B
=> 'I am version B'

5 Contributors

gonzoyumobyzykchenxsanaskoufissnitin315

Translators