더북(TheBook)

다양한 상황을 해결하기 위해 exports 속성이 도입되었습니다. 먼저 '.'의 경우를 살펴봅시다. '.'import 'npmtest'를 한 경우에 해당합니다. 내부에 import, require, default 속성이 있습니다. import는 ES 모듈에서 불러올 때, require는 CommonJS 모듈에서 불러올 때를 의미합니다. 각각 패키지 폴더의 ./index.mjs와 ./index.js를 불러옵니다. defaultimportrequire 속성이 없을 때 기본적으로 불러올 경로를 의미합니다.

지금은 importrequire가 모두 있으므로 default가 의미가 있진 않습니다. default를 적을 때는 항상 객체의 마지막 속성으로 존재해야 합니다. importrequire보다 먼저 존재하면 default가 사용되어 버립니다.

'./package.json'import 'npmtest/package.json'을 한 경우에 해당합니다. 그러면 패키지 폴더의 ./package.json을 불러옵니다. ES 모듈이든, CommonJS 모듈이든 동일한 파일을 불러올 때는 파일 경로만 적어도 됩니다.

import, require, default 이외에도 node, browser, types 같은 속성이 있습니다. 각각 노드 환경에서 불러올 때, 브라우저 환경에서 불러올 때, 타입스크립트 타입을 불러올 때를 의미합니다. default가 객체의 마지막 속성으로 존재해야 하는 것처럼, types는 객체의 첫 번째 속성으로 존재해야 합니다.