babel-in-monorepo

with jest

node_modules 를 트랜스파일 하기 위해 babel.config.js 를 사용하려면 다음 문서를 보자.

babel은 자동으로 root 디렉토리 babel.config.js 찾음

  • 혹은 명시적인 configFile값을 사용할 수 있음, default config file search 행동을 오버라이드 하기 위해

file-relative 설정

바벨은 디렉토리 구조를 검색하여 .babelrc를 로드 함

file-relative 설정은 최상단 config value와 머지됨.

  • 특정 오버라이드를 하게 될 경우 유용

근데 몇가지 단점 있음

  • package.json이 포함된 디렉토리가 찾아지면 검색 멈춤

  • 그래서 relative config는 오직 single package에서만 적용됨.

Monorepos

모노레포에서, 핵심은 바벨은 working directory를 logical root로 취급하는 것

  • 만약 바벨이 전체 repo에 적용되는 경우, 특정 sub-package내에서 실행된다면 이것은 문제를 일으킬 수 있음

위와 별도로 .babelrc를 사용할지, 중앙의 babel.config.js만 사용할지 결정해야함

  • babelrc 파일은 babel6에서 하위폴더별 설정을 위해 필수가 아님 (babel7의 babel.config.js도 마찬가지)

Root babel.config.js files

모노레포에서 첫번째로 할 일은 루트에 babel.config.js 만드는 거

  • 얘는 저장소의 base directory의 core concept을 정의

  • 만약 특정 package를 구성하기 위해 .babelrc를 사용한다면, repo-level option을 설정해줘야하는게 중요

  • repo 구성을 root babel.config.js로 지정할 수 있음

  • override로, 저장소의 subfoler에 적용할 수 있음

    • 이것은 레포에 수많은 .babelrc 만드는것보다 더 쉬움

첫번째 이슈

  • 바벨은 babel.config.jsroot로 설정된 dir에서 로드하려고 함

    • 이것은 만약 너가 babel.config.js 파일을 만들었다면

summary

사내 npm 모듈화 작업 중에 바벨 설정을 루트에 두고, 특정 패키지에 필요한 설정이 있을 경우 오버라이드 하는게 있나 해서 찾아봤는데 친절하게 설명되있었다.

여튼 바벨을 프로젝트 폴더 루트에 있는 것을 바라보고, 특정 패키지에서 오버라이드 가능하다.

Last updated

Was this helpful?