Node.js모듈과 패키지

패키지 배포와 bin CLI

Node.js 패키지를 재사용 가능한 라이브러리나 CLI로 배포할 때 `package.json`의 핵심 필드와 `bin` 구성을 어떻게 읽는지 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

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라이브러리 진입점
binCLI 명령 연결
files배포 포함 파일 범위
npm publish레지스트리에 배포

주의할 점

로컬에서는 잘 되는데 배포 후 깨지는 패키지 상당수는 코드보다 package.json 진입점과 포함 파일 범위 문제에서 나옵니다. "무엇을 공개하고 어떤 이름으로 실행될지"를 먼저 확인하는 편이 안전합니다.

참고 링크

2 sources