기본 패턴
json
{
"name": "my-tool",
"version": "1.0.0",
"type": "module",
"bin": {
"my-tool": "./bin/cli.js"
}
}설명
- Node.js 프로젝트가 앱인지, 라이브러리인지, CLI인지에 따라
package.json의 의미도 달라집니다. 배포를 생각하면 코드보다 메타데이터와 진입점 구성이 중요해집니다. - 라이브러리라면 어떤 파일을 외부에 공개할지
exports,main,types같은 필드가 중요하고, CLI라면bin필드가 핵심입니다.bin은 설치 후 어떤 명령 이름으로 실행될지 연결합니다. - 패키지 배포는 단순 업로드가 아니라, 이름, 버전, 공개 범위, 포함 파일, 진입점을 계약처럼 정하는 작업입니다. 그래서
npm publish보다 먼저 패키지가 어떤 형태로 소비될지 정리하는 편이 중요합니다. - CLI 패키지는 "스크립트를 만든다"보다 "설치 가능한 명령을 만든다"에 더 가깝습니다. 실행 파일 헤더, 인자 처리, 오류 코드, help 출력까지 함께 생각해야 합니다.
- 실무에서는 패키지 배포 경험이 있으면 Node 생태계 전체를 더 잘 읽게 됩니다. 앱만 만드는 입장에서도 외부 패키지가 왜 그런 구조인지 이해하기 쉬워집니다.
빠른 정리
| 필드 | 역할 |
|---|---|
name / version | 패키지 식별과 배포 버전 |
exports / main | 라이브러리 진입점 |
bin | CLI 명령 연결 |
files | 배포 포함 파일 범위 |
npm publish | 레지스트리에 배포 |
주의할 점
로컬에서는 잘 되는데 배포 후 깨지는 패키지 상당수는 코드보다 package.json 진입점과 포함 파일 범위 문제에서 나옵니다.
"무엇을 공개하고 어떤 이름으로 실행될지"를 먼저 확인하는 편이 안전합니다.
참고 링크
2 sources