webpack

Blackpepper·2024년 8월 13일

웹팩(webpack)은 웹에 사용되는 모든 자원을 번들링(bundling)해주는 도구이다.

이번에 웹팩으로 js를 번들링하면서 Defineplugin, NormalModuleReplacementPlugin을 사용해보게 되면서 간략하게 정리하고자 한다.

번들링은 여러 파일을 묶어 더 적은 수의 파일로 압축시키는 과정이다. 이를 통해 코드 난독화, 로딩 속도 향상, HMR(코드를 수정하면 바로 웹에 적용되는 기술)을 얻을 수 있다.

또한 여러 설정을 통해 원하는대로 번들링할 수 있는데, 이를 가능케하는 것 중 하나가 플러그인이다.

Defineplugin은 빌드 타임에 변수를 주입해 웹 코드 내에서 전역적으로 사용할 수 있다. 나의 경우는 사용자의 웹 실행 환경을 nodejs에서 제공하는 os 모듈을 통해 os.type()을 전역 변수로 사용할 수 있게끔 만들었다.

NormalModuleReplacementPlugin은 빌드 타임에 인자를 통해 조건에 따라 빌드할 파일을 선택할 수 있다.

기본적인 형태는 다음과 같다.

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

첫번째 인자는 대체하려는 파일들을 입력하고, 두번째 인자로 주어지는 파일들로 대체된다. 특이사항으로 정규식을 통해 바꾸고 싶은 파일들을 잘 선택할 수 있다.

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

나의 경우는 (^|\/)로 파일 명의 앞부분을 고정했고, (.*)로 파일 명의 뒷 부분에 어떤 문자열이 들어가도 포함하도록 했다. 위의 예시처럼 2번째 인자에서 바꿀 인자를 언급하고 $를 이용해 사용한 정규식을 적용할 수도 있다.

참조 : https://webpack.js.org/plugins/normal-module-replacement-plugin/

profile
까만 연미복의 남자

0개의 댓글