19-2 npm과 오픈소스 배포

airbus·2025년 5월 26일

프로그래머스

목록 보기
84/93

19-2 npm과 오픈소스 배포

npm을 통해서 오픈소스 배포

npm


(Node Package Manager) npm

자바스크립트 프로그래밍 언어를 위한 패키지 관리자.
자바스크립트 런타입 환경 Node.js의 기본 패키지 관리자.

// 패키지 등록을 위해서 가입이 되어있어야함.


준비

프로젝트 폴더 생성

mkdir (폴더 이름) // 폴더 이름으로 폴더 생성
cd (폴더 이름) // 위에서 생성한 디렉토리(폴더 이름)로 이동
npm init // 프로젝트 초기화 - package.json 생성 - 패키지 이름은 처음에 자동으로 '폴더 이름'으로 설정되어 있음


초기화 진행

package name : 패키지 이름은 처음에 자동으로 '폴더 이름'으로 설정되어 있음
version : 초기값 (1.0.0) 으로 되어있는데 0.0.1 로 수정하면 0.0.1로 변경됨
description : 패키지에 대한 설명, 기능
entry point : 진입 파일. 패키지를 require/import 시 기본으로 불러오는 파일 ( 일반적으로 index.js 사용 )

test command : 테스트 자동화 시 사용
git repository : Git 저장소 URL. 버전 관리 주소. (연결 권장)
keywords : 키워드 목록. npm에서 검색시 사용됨. 태그같은 기능.
author : 작성자

license : 라이선스 (기본값 : ISC). (MIT, Apache 등 오픈소스 라이선스는 명확히 적는 것이 좋음)
Is this OK? (YES) : yes 입력시, 입력된 값들로 package.json 생성됨

이후 수정사항이 있을 경우 package.json에서 수정


ignore


배포, 업로드시 제외할 파일 설정

예시)
.npmignore

  • test/ : 테스트 코드 저장한 폴더 제외
  • node_modules/ : node 의존성 배포하지 않음
  • webpack.*.js : 웹팩 설정 파일 제외

.gitignore

  • .idea : IntelliJ IDEAIDE 설정 폴더 제외
  • .DS_Store : macOS 시스템의 숨김 파일 제외
  • node_modules : node 의존성 배포하지 않음
  • package-lock.json : 패키지 락 파일 제외(일반적으로 라이브러리 배포에는 불필요함)

참고

gpt 설명 보충

  • .npmignore 파일이 없으면 자동으로 .gitignore를 참고해서 제외할 파일을 정합니다.
  • .npmignore 파일이 있으면 .npmignore 내용만 적용됩니다.
  • node_modules은 보통 .gitignore.npmignore 둘 다에 포함해 두는게 일반적입니다.

package.json 과 package-lock.json의 차이 

구분package.jsonpackage-lock.json
목적프로젝트 설정 및 의존성 선언의존성 트리 고정 및 버전 잠금
작성자개발자(직접 작성, 수정)npm이 자동 생성 및 관리
버전 지정 방식버전 범위(semver, 예: ^1.0.0)정확한 버전(예: 1.0.3)
포함 정보주로 1차 의존성모든 의존성(1차 + 하위 의존성)
중요성의존성 관리 기본환경 일관성 유지 필수
버전 관리 시점개발자가 변경패키지 설치 시 자동 변경

package.json : “나는 이 패키지가 필요해~ (버전 범위 포함)”라고 선언
package-lock.json : “내가 지금 이 버전을 설치했어, 앞으로도 이걸 써!” 라고 기록


로그인


VSC(visual studio code)에서 위와같이 패키지를 만들고, 제외 할 파일도 설정한 다음
터미널에 npm login 을 입력하면 로그인 할 수 있는 사이트가 열립니다.

메일로 전송된 로그인 인증 코드를 입력후 다시 VSC로 돌아가면 로그인이 된 것을 확인 가능합니다.
npm whoami : 터미널에 연결된 계정 확인

npm init -y : npm init으로 npm 프로젝트에 대한 기본 양식을 하나하나 작성을 하는데, -y 속성을 이용하여
기본값으로 설정된 package.json으로 만들 수 있습니다.
아까 위에서 직접 작성하고 저장하였으므로, 다시 기본값으로 덮어씌워지지는 않고, 입력했던 값들이 기본값으로 되어있으므로, 작성한 내용이 출력됩니다. (default값이 출력 x, 입력했던 내용 o)

gpt : npm init -y를 실행하면 기존 파일을 덮어 쓸 수도 있어서 조심해야 합니다. 확인이나 편집이 필요할 경우 package.json 파일에서 편집하는 게 안전


npm publish


npm publish
package.json에 정의된 정보를 기반으로 패키지를 업로드 합니다.
// 프로젝트의 루트 폴더에서 실행해야 합니다.

  • 오류가 뜰 경우 권한 문제일 수 있음. // 예)명령어 실행 권한 문제의 경우는 관리자 권한관련
  • 이름 : 패키지 이름은 고유해야 합니다. (npm 에 등록된 이름은 사용불가)
  • 버전 : 이미 같은 버전이 있으면 업로드 불가합니다.
  • package.json에서 "private": true 로 되어있는 경우 publish 불가합니다. (비공개 상태)
  • .---ignore에 따라 제외할 파일이 결정됩니다.
  • public(공개)가 기본설정입니다. 비공개 배포하려면 별도 설정, 유료 플랜이 필요합니다.

gpt 보충설명

자주 쓰는 옵션
옵션 설명
--access public 스코프 패키지(예: @myorg/mypkg)를 공개로 배포할 때 사용
--dry-run 실제로 배포하지 않고 어떤 파일이 포함되는지 미리보기


npm unpublish


npm에 배포한 패키지를 삭제(취소)합니다.

npm unpublish my-package@1.0.0		//@ 뒤는 버전
npm unpublish my-package --force	// 패키지 전체를 npm에서 제거 (복구 힘듬)

e.g.
npm unpublish sample@0.0.1		// 0.0.1 버전 제거

배포한 npm 페이지의 version 탭에서 삭제 된 것을 확인가능합니다.


제한사항

  • 배포된지 72시간 이내 unpublish 가능
  • 한번 취소된 경우 24시간 이내에 동일한 이름의 패키지 업로드 불가
  • 다른 프로젝트가 의존중인 경우 unpublish 불가
  • 지난 주 다운로드 횟수가 300 이하인 경우만 가능 & 단일 소유자(협업자 없음)
  • 유료 플랜인 경우 내용이 다를 수 있음

e.g.
처음으로 패키지를 생성해서 publish 한 다음 취소하려는 경우 => 버전이 0.0.1 밖에 없는데 해당 버전을 unpublish 하려고함 = 패키지 자체를 삭제하겠다는 의미와 동일하므로 --force 옵션을 사용해야함.

0개의 댓글