zerovoids.dev
react-compiler설정

라이브러리 컴파일

{ target: '<최소 지원 React 버전>' } + react-compiler-runtime

npm 라이브러리를 미리 컴파일해 배포하는 법. 런타임 의존성과 target 설정이 핵심이다.

since React Compiler 1.0verified v1.0 · 2026-08-05
react-compilerlibrariestargetruntimebackwards-compatibility

무엇

라이브러리 저자는 컴파일러로 최적화한 코드를 미리 빌드해 npm에 올릴 수 있다. 그러면 사용자는 컴파일러를 안 켜도 최적화된 버전을 그대로 받는다.

앱이 아니라 배포용 패키지를 만드는 쪽을 위한 내용이다.

무슨 일이 일어나나

미리 컴파일해 배포하면 세 가지 이점이 있다. 사용자가 컴파일러를 아직 안 써도 최적화 혜택을 받고, 사용자 쪽에 별도 설정이 필요 없으며, 모두가 같은 최적화 버전을 받아 동작이 일관된다.

대신 최적화된 코드는 런타임 헬퍼에 기댄다. 특히 React 19 미만을 지원하는 라이브러리는 react-compiler-runtime을 **일반 의존성(dependencies)**으로 넣어야 한다. 개발 의존성에 두면 사용자 번들에 안 들어가서 "Cannot find module" 오류가 난다.

사용법

컴파일러 플러그인은 개발 의존성으로 설치한다.

npm install -D babel-plugin-react-compiler@latest

낮은 버전을 지원한다면 런타임을 일반 의존성으로 설치한다.

npm install react-compiler-runtime@latest

target자기 라이브러리가 지원하는 가장 낮은 React 버전에 맞춘다. 이 값이 실제 최소 지원 버전과 어긋나면 호환성이 깨진다. 그리고 컴파일한 버전과 안 한 버전 양쪽으로 테스트해, 지원 범위의 React 버전에서 모두 도는지 확인한다.

실무 예시

React 17 이상을 지원하는 라이브러리의 설정이다. package.json에 런타임을 일반 의존성으로, React를 peer로 둔다.

package.json
{
  "dependencies": {
    "react-compiler-runtime": "^1.0.0"
  },
  "peerDependencies": {
    "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
  }
}

빌드 설정은 target을 최소 지원 버전으로 내린다.

babel.config.js
module.exports = {
  plugins: [
    ['babel-plugin-react-compiler', {
      target: '17', // 지원하는 가장 낮은 React 버전
    }],
  ],
}

왜 중요한가

이건 라이브러리를 만들어 배포하는 사람에게만 해당하는 주제라, 앱만 짓는 대부분에겐 지금 당장 쓸 일이 없다. 그래도 자기가 쓰는 라이브러리가 왜 이미 최적화되어 있는지, 왜 react-compiler-runtime이 의존성에 딸려 오는지를 이해하는 데는 도움이 된다. 실제로 패키지를 낼 때가 오면 그때 자세히 보면 된다.

Reference