패키지를 만들때 기본 구성
{
"main": "./dist/cjs/index.js",
"types": "./dist/cjs/types/index.d.ts",
"files": ["dist/**/*"],
"scripts": {
"clean": "rm -rf ./dist",
"build": "pnpm run clean && pnpm build:esm && pnpm build:cjs",
"build:esm": "tsc -p ./tsconfig.esm.json && mv dist/esm/index.js dist/esm/index.mjs",
"build:cjs": "tsc -p ./tsconfig.cjs.json",
"prepack": "pnpm build"
},
"repository": {
"type": "git",
"url": "https://github.com/nolleh/serialize-interceptor"
},
"keywords": [
"nestjs",
"nest.js",
"serialize",
"deserialize",
"camel",
"snake",
"json",
"dto",
"transform"
],
"exports": {
".": {
"import": {
"types": "./dist/esm/types/index.d.ts",
"default": "./dist/esm/index.mjs"
},
"require": {
"types": "./dist/cjs/types/index.d.ts",
"default": "./dist/cjs/index.js"
}
}
}
}
main/types/files
{
"main": "./dist/cjs/index.js",
"types": "./dist/cjs/types/index.d.ts",
"files": ["dist/**/*"]
}
이 패키지의 entry point 는 무엇인지에 대한 정보인지가 main 에, 그 타입에 대한 정보가 types 에, 어떤 파일들이 패포 될 것인지에 대한 정보가 files 로 기입된다. 여기서 files 는, whitelist 로써 동작하며, 가장 높은 우선순위를 보유한 것으로 알고 있음.
scripts
{
"build": "pnpm run clean && pnpm build:esm && pnpm build:cjs",
"build:esm": "tsc -p ./tsconfig.esm.json && mv dist/esm/index.js dist/esm/index.mjs",
"build:cjs": "tsc -p ./tsconfig.cjs.json"
}
esm 을 사용하는 모듈에서 사용될 빌드 파일과 cjs 을 사용하는 모듈 각각에 대해 별도 배포 파일을 생성하기 위해 빌드 설정을 분리한다. build 명령어를 통해서는 양쪽 모두를 빌드한다. ESModule 쪽에서는 mjs extension 을 사용하기 위해 mv 도 잊지 말것.
repository / keywords
meta information. npmjs.com 등에서 노출 될 때 사용되는 정보.
exports
exports 에 대한 기본 설명 - exports subpath
exports 없이는 사용처에서 추가적으로 dist 를 참조해야하는 상황이 발생할 수 있는데, (main 은 index.js 만 지정하기 때문에.)
ex. import { a } form ‘serialize-interceptor/dist/a’;
or
import { a } from ‘serialize-interceptor/nested/a’
when directory structure is..
/nested a.ts index.ts
subpath 를 배포하기 위해서는 exports 에 추가로 작성하는 형태로 접근가능.
기본 구문:
{
exports: {
".": "./dist/index.js"
"./nested": "./dist/nested/index.js"
}
}
exports - conitional exports
여기서 모듈 시스템에 따른 conditional exports 확장