"moduleResolution"은 뭘까 ? #25
Unanswered
yunseorim1116
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
module
| 소스 코드가 컴파일될 때 어떤 모듈 시스템을 사용할지 결정하는 역할을 합니다.
module 옵션은 우리가 내보낼 output, 컴파일 후에 생성되는 JavaScript 파일이 어떤 모듈 시스템을 사용할지 결정하는 것입니다.
예를 들어 TypeScript 코드를 컴파일하면 JavaScript 파일이 생성되는데 이 파일이 CommonJS, ES Modules, 또는 AMD와 같은 모듈 시스템 중 어떤 것을 사용할지를 결정하는 것이 module 옵션입니다.
module: "CommonJS": Node.js에서 사용하는 CommonJS 모듈 시스템으로 컴파일됩니다.
module: "ESNext": 최신 ECMAScript 모듈 시스템(ESM)으로 컴파일됩니다.
이 옵션은 컴파일된 결과물에만 영향을 미칩니다.
moduleResolution
| 현재 소스코드 내부에 import 되어 있는 모듈들의 경로(specifier)를 어떻게 해석할지 결정하는 옵션
"bundler"(번들러 사용 시)*: package.json 의 exports, imports 필드 설정값을 기반으로 모듈 경로를 해석합니다.
2024년 10월 기준으로 사용할 수 있는 moduleResolution 옵션 세 가지를 소개합니다.
1. nodeNext
최신 Node.js 정책에 기반하여 모듈 경로를 해석합니다.
이 옵션을 사용할 때는 module 옵션도 반드시 nodeNext로 설정해야 합니다.
최신 Node.js 환경에서 권장되며, 모듈을 다룰 때 최신 Node.js 모듈 정책을 준수합니다.
2. node16
Node.js v16+ 정책을 따릅니다.
module 옵션은 반드시 node16으로 설정해야 하며, nodeNext로 설정하면 안 됩니다.
nodeNext와 거의 동일하지만, Node.js v16에 맞춰진 설정입니다.
3. bundler
번들러와 유사한 방식으로 모듈 경로를 해석합니다. nodeNext와 비슷하지만, 다음과 같은 차이점이 있습니다.
1.상대 경로로 모듈을 import할 때 파일 확장자 생략이 가능합니다.
2. 디렉토리 모듈 (예: index.js 파일)을 사용할 수 있습니다.
최신 Node.js에서는 import 시 파일 확장자를 반드시 명시해야 하며 디렉토리 모듈은 허용되지 않습니다. 그러나 일부 번들러는 확장자 생략을 지원하므로, 이에 대응하여 TypeScript v5부터 bundler 옵션이 추가되었습니다.
이 옵션을 사용할 경우 module 옵션은 반드시 esnext로 설정해야 합니다.
어플, 라이브러리 개발
어플리케이션 개발 - node.js 환경
라이브러리 개발 - 번들러 없음
module: node16
moduleResolution: node16
라이브러리 컴파일과 어플리케이션 컴파일의 차이
출처
Beta Was this translation helpful? Give feedback.
All reactions