CommonJS와 ESM에 모두 대응하는 라이브러리 개발하기: exports field
Toss
Node.js에서 현재는 CommonJS와 ES Modules가 혼재하는 상태입니다. 예전에는 ES Modules가 없었기 때문에 Node.js는 CommonJS를 선택했고 꽤 오랫동안 잘 동작했지만 이제는 ES Modules가 표준이 되었기 때문에 Node.js는 CommonJS로 구축된 생태계를 유지하면서도 ES Modules를 지원하기 위한 방법을 오랫동안 논의한 끝에 현재는 둘다 지원하고 있습니다. 이 부분이 사용하는 쪽과 만드는 쪽의 지식이 다 필요하기 때문에 약간 혼란스러운 상황입니다. 저는 CJS가 더 익숙하기 때문에 ESM을 섞어서 쓰기 시작하면서 헷갈리는 부분을 공부하려고 하다가 미루고 있었는데 이 글에 꽤 정리되어 있습니다. npm.js 생태계에서는 사용하는 모듈의 지원 상태도 봐야 하지만 이 글을 쓴 Toss에서는 내부에서 CJS와 ESM을 모두 지원하기 위해서 규칙을 만들어서 통일시키기 쉬운 상태입니다. Node.js가 package.json의 type 필드를 이용해서 CJS와 ESM을 어떻게 구분하는지 설명하고 exports 필드에서 require와 import키를 지정해서 CJS와 ESM의 파일을 각각 로딩할 수 있게 하는 방법을 설명합니다.
2022년 10월 19일 오후 4:32