TS로 변경 시 "type": "module" 제거 이유가 궁금합니다.
299
작성한 질문수 2
확장자를 TS로 변경했을 때 코드에는 ESM의 import, export를 사용했는데 왜 package.json파일의 ESM 관련 옵션인 "type": "module"을 제거하는지 궁금합니다.
GPT의 답변에 의하면
TS 파일은 컴파일 과정에서 CommonJS나 ESM이나 알맞게 변환을 하기 때문에 해당 옵션이 필요 없고, Jest와의 호환성을 위해
"type": "module"을 제거해주는 것이고,JS파일은 기본적으로 CommonJS모듈 시스템을 사용하기 때문에 import문을 사용했으면 ESM방식으로 해석하도록 명시하기 위해서
"type": "module"을 추가한다.
라고 설명을 해주는데 그럼 JS 파일의 경우 Jest와의 호환성을 고려하지 않는건지..
이해가 잘 되지 않습니다. 혹시 설명을 해주실 수 있을까요?
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
모락님께서 질문하신 내용에 대해서 설명드리겠습니다.
TypeScript 파일(.ts)은 TS 컴파일러에 의해 JavaScript로 변환됩니다. 이 과정에서 모듈 시스템(CommonJS 또는 ESM)이 지정될 수 있으며, 일반적으로 tsconfig.json 파일에서 설정할 수 있습니다. 그렇기 때문에 TypeScript 파일에서는 package.json의 "type": "module" 옵션이 필수적이지 않을 수 있습니다.
Jest와 관련하여 "type": "module"을 삭제하는 이유는 Jest의 기본 모듈 시스템이 CommonJS이기 때문입니다. Jest와 ESM 모듈과의 호환성 문제 때문에 TS의 경우 CommonJS로 설정하는 경우가 많고, 따라서 "type": "module"을 제거해 Jest와의 호환성을 높이는 것입니다.
JS 파일의 경우 기본적으로 CommonJS 모듈을 사용합니다. JS 파일에서 ESM 방식의 import, export를 사용하려면 "type": "module"을 추가해 ESM 방식으로 해석하도록 명시합니다.
하지만 Jest가 ESM을 지원하기 위해 추가 설정이 필요로 할 수 있기 때문에 호환성 문제를 피하려고 CommonJS 사용을 유지하는 경우가 많습니다.
즉, TS 파일의 경우 컴파일 과정에서 CommonJS로 변환하는 것이 보통이기 때문에 "type": "module"이 필요 없으며, ESM을 지원하는 Jest 설정이 번거롭기 때문에 이러한 설정을 채택합니다.
더 궁금한 점이 있으시면 언제든지 질문해 주세요!
Spring Data 자체 ESM/Jackson 지원 참고 자료도 도움이 될 수 있습니다.
감사합니다.
UserService, CertificationService 책임 분리 기준 질문
0
24
1
레이어드 아키텍처에서 도메인 중심 패키지 구조를 적용하거나 변화하는 시점이 있을까요?
1
38
2
POJO에서 Spring Test로 넘어갈 때 누락(해결됨)
0
32
1
섹션 4) 8. 실무 QA의 관찰 포인트 이해 강의 질문
0
36
1
tryMove(..) 메서드 ArrayIndexOutOfBoundsException 제보
1
60
2
AvailableUsers
0
40
1
선생님, 테스트 코드 제보 강의는 언제쯤 올라오나요?
0
75
2
mockfunction에 대해서
0
52
1
mockfunction에 대해서
0
54
2
강의 교안
0
116
2
jest-extended 에러 해결
0
155
1
npx cross-env NODE_OPTIONS="$NODE_OPTIONS --experimental-vm-modules" jest 터미널 에러
1
195
1
안녕하세요 jest toHaveBeenCalledTimes 관련 질문드립니다.
0
166
2
안녕하세요 제로초님
0
166
1
제로초님 강의 교안을 볼 수 있는 곳이 있을까요?
0
232
3
jest.fn()으로 모킹 함수를 만들어 expect() 할 경우 undefined 출력됩니다
0
102
1
jest-extended 설정 중 TypeError
0
167
1
클래스는 어떻게 모킹하나요?
0
158
1
호출 순서 테스트, mock 객체, jest-extended 강의 내용중 TypeError가 나는데요!ㅠㅠ
0
136
1
모듈 모킹 시 메소드 동작 문제
0
159
1
vsCode 내에서 Jest 설정 할 때 setting.json 내 설정 시 궁금한 점이 있습니다.
0
441
1
비동기 함수 테스트 중 특정 케이스 에러
0
192
1
jest.config.js 파일 내용 다른 분들 참고
0
326
2
강의 교안
0
257
2





