[npm] npm에 node.js cli 프로그램 배포하기

2025. 11. 23. 16:02·npm
최근 우아한 테크코스의 오픈미션으로 node.js 환경에서 실행되는 압축 프로그램을 만들었습니다.

과제로 만든 이 프로그램을 실행하려면  git repo clone -> npm run build -> npm start를 해야 하는데,
저는 이 과정이 사용자 입장에서 불편하다고 느꼈습니다.

그래서 npm 레지스트리에 프로젝트를 배포하고, npx로 실행하는 방법을 알아봤습니다.

❗️라이브러리를 배포하는 것이 아닌, CLI 프로그램을 배포하는 것을 목적으로 간단하게 알아봤습니다.

 

npm 이란?

npm(node package manager)은 Node.js 패키지를 관리할 수 있는 도구이기도 하지만,

패키지 저장소(pacakge registry) 서비스이기도 합니다.

 

npm에 프로젝트 배포하기

1. npmjs 계정 생성

npmjs에 접속하여 계정을 생성합니다.

https://www.npmjs.com/

 

2. npmjs 로그인

node.js 프로젝트에서 login을 합니다.

npm login

 

3. package.json 수정

npm start가 아닌 npx로 CLI 프로그램을 실행하기 위해서는 package.json에 몇 가지 프로퍼티를 수정해야 합니다.

{
  "name": "open-mission-compressor",
  "version": "0.0.3",
  "description": "Pack and unpack files",
  "author": "BHyeonKim",
  "repository": {
    "type": "git",
    "url": "https://github.com/Runzipper/core"
  },
  "license": "ISC",
  "type": "module",
  "main": "index.ts",
  "scripts": {
    "start": "./dist/index.cjs",
    "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
    "build": "tsup src/index.ts",
    "lint": "prettier --write . && eslint --fix ."
  },
  "bin": {
    "open-mission-compressor": "./dist/index.cjs"
  },
  "files": [
    "dist"
  ],
  ...
}

 

pacakge.json을 보면 다양한 프로퍼티가 있는데,

 

이중 필수 프로퍼티는

  • name : 패키지 이름
  • version: 패키지 버전

입니다.

 

 

여기에 추가로 CLI 프로젝트를 배포하기 위해서는

  • bin : CLI 실행 파일 엔트리 

를 정의하면 됩니다.

 

저 같은 경우는 패키지 이름인 open-mission-compressor를 키로 하여

cli 프로그램의 엔트리를 설정해 줬습니다.

 

이렇게 bin을 설정하면 npx open-mission-compressor를 입력하여 프로그램을 실행할 수 있습니다.

 

4. npm에 publish

npm publish

를 입력하여 프로젝트를 npm에 배포합니다.

 

위 과정을 거치면 프로젝트를 로컬에 clone 할 필요가 없습니다.

단지 "npx 패키지이름"을 입력하여 로컬에 파일이 없으면 npm registry에서 다운로드한 후 실행하고,

파일이 존재하면 다운로드 없이 실행합니다.

 

npm 프로젝트 용량 줄이기

간단하게 package.json에서 bin만 추가해서 npm에 publish 하면 각종 설정파일들과 소스코드 전체가 npm에 올라갑니다.

 

하지만 npx로 프로그램을 다운로드 및 실행하는 사용자 입장에서, 각종 설정파일들과 소스코드는 필요가 없습니다.

사용자에게 필요한 것은 실행가능한 빌드 파일 뿐입니다.

 

npm에 파일들을 선별해서 올리는 방법은 두 가지가 있습니다.

  • package.json의 files 프로퍼티를 설정하여 필요한 파일만 npm registry에 올리는 방법
  • .npmingore파일을 작성하여 npm registry에 올라가면 안 되는 파일을 제외하는 방법

저는 빌드가 완료된 파일만 npm registry에 올리기 위해 files에 빌드파일의 경로를 작성했습니다.

{
  ...
  "files": [
    "dist"
  ],
  ...
}

 

이렇게 하고서 배포를 하면 npm registry에는 다음과 같이 빌드 폴더와 package.json, README.md만 있는 것을 확인할 수 있습니다.

 

배포 시 주의할 점

package.json version

npm registry에 한번 배포를 하면 같은 버전으로는 배포를 할 수 없습니다.

기능추가나 버그수정등으로 배포가 필요할 시 다음 명령어로 패키지의 버전을 올리고서 배포해야 합니다.

npm version patch // 패치 버전 올리기 0.0.3 → 0.0.4
npm version minor // 마이너 버전 올리기 0.1.0 → 0.2.0
npm version major // 메이저 버전 올리기 0.0.0 → 1.0.0

 

files

files, main에 정의된 파일들은 .npmignore에서 작성하더라도 제외되지 않습니다.

files, main이 우선권을 갖기 때문에 유의해야 합니다.

'npm' 카테고리의 다른 글

[npm] Github packages로 private package 배포하기  (0) 2025.12.01
[package.json] peer dependency (feat. UI 라이브러리)  (0) 2025.12.01
'npm' 카테고리의 다른 글
  • [npm] Github packages로 private package 배포하기
  • [package.json] peer dependency (feat. UI 라이브러리)
월월월월
월월월월
  • 월월월월
    Bobostown
    월월월월
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • 개발 (4)
      • 사이드 프로젝트 (1)
        • interview-lab (1)
        • Loft (0)
      • Claude (1)
      • React (5)
        • React Router (1)
        • Interactive (2)
      • Javascript (1)
      • node.js (3)
      • npm (3)
      • Nest.js (0)
      • Web (5)
        • Web API (4)
      • TDD (2)
        • Jest (0)
      • TroubleShooting (1)
      • Rust (1)
      • Bash (1)
      • 보안 (1)
      • 일상 (4)
      • 여행 (5)
      • 우아한 테크코스 8기 프리코스 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    VITE
    json-schema
    Media Capture and Streams API
    package.json
    Web API
    node.js
    runzipper
    webbase line
    오실리에이터
    react
    보홀
    npm
    오픈미션
    LZ77
    framer motion
    private package
    motion
    nofitication
    peer dependency
    devfest 2025
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
월월월월
[npm] npm에 node.js cli 프로그램 배포하기
상단으로

티스토리툴바