자바스크립트로 제작된 모듈이 모여 있는 패키지 매니저이다.
대체제로는 yarn
과 pnpm
이 있다. 전자는 메타(전 페이스북)에서 제공하는 패키지 매니저이고, 후자는 npm
의 성능을 개선한 것이다. 별도로 설치해야 한다.
패키지 버전을 관리하는 파일로, 사용할 패키지의 버전을 기록해 둔다. npm
은 npm init
명령어을 통해 package.json
파일을 제공한다.
package name: (learning_node) [프로젝트 이름]
version: (1.0.0) [프로젝트 버전]
description: Learning Node.js [프로젝트 설명]
entry point: (index.js) [실행 파일 진입점]
test command: [코드 테스트 명령어]
git repository: [코드 저장한 깃 주소]
keywords: [패키지 검색 키워드]
author: Real-Bird [프로제트 작성자]
license: (ISC) [패키지 라이센스]
About to write to C:\(...)\learning_node.js\package.json:
{
"name": "learning_node",
"version": "1.0.0",
"description": "Learning Node.js",
"main": "index.js",
"directories": {
"example": "examples"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Real-Bird",
"license": "ISC"
}
Is this OK? (yes) yes
scripts
는 npm
명령어를 저장하는 부분이다. npm run [명령어]
로 스크립트를 실행한다.
패키지 설치는 npm install [패키지명]
으로 설치한다. 이때, 설치하는 패키지와 프로젝트 명이 겹치면 안 된다. --save
옵션을 자주 볼 수 있는데, 이는 dependencies(의존성)
에 추가한다는 의미이다. npm v5
부터는 기본값으로 설정되어 있어 따로 적지 않아도 된다.
간혹 패키지 설치시 found [숫자] vulnerabilities
혹은 [숫자] [심각도] severity vulnerability
문장을 볼 수 있다. 취약점 검사로 인한 결과이며, npm audit fix
명령어로 npm
스스로 수정한다.
패키지를 설치하면 package-lock.json
도 함께 설치된다. node_modules
에 들어 있는 패키지들의 dependencies
가 담긴 파일이다. 정리하자면 package.json
은 내가 설치한 패키지 의존성 기록이고, package-lock.json
은 설치한 모듈 간의 의존성 기록이다.
한 번에 여러 개의 패키지를 설치하려면 npm install [패키지1] [패키지2] [패키지3] ...
으로 나열하여 입력하면 된다. 배포에는 사용하지 않고 개발에만 사용하는 devDependencies(개발 의존성)
패키지는 --save-dev
옵션을 추가하여 설치한다.
peerDependencies
가 존재하는 경우, 직접 사용하지는 않지만 해당 패키지가 설치되어 있다는 전제 하에 코드를 작성했다는 의미이다.
전역 설치 옵션도 제공한다. --global
을 추가하면 패키지가 전역 설치되어 명령어로 사용할 수 있게 된다.
명령어나 옵션을 줄여서 쓸 수 있다.
npm install
➡️npm i
--save-dev
➡️-D
--global
➡️-g
git
등 버전 관리 프로그램에서 복사한 clone
에는 보통 node_modules
없이 package.json
과 package-lock.json
만 존재한다. npm i
로 손쉽게 설치할 수 있지만, 상기 두 파일이 변하기 때문에 배포 때는 npm ci
를 사용한다. package-lock.json
에 적힌 대로 설치된다.
패키지를 임시로 설치해서 실행하는 용도이다. npx [패키지]
를 입력하면 package.json
에 설치하지 않고 임시로 사용 가능하다. 혹은 기록은 필요하나 전역 설치를 기피한다면 devDependencies
에 설치한 후 CLI
를 실행할 수도 있다. 예를 들어, 패키지의 최신 버전을 체크하는 npm-check-updates
가 필요하지만 전역 설치가 싫다면 npm i -D npm-check-updates
설치 후 npx ncu
로 실행할 수 있다.
노드 패키지의 버전은 SemVer(Semantic Versioning, 유의적 버전)
방식을 따라 세 자리로 이루어져 있다.
첫 번째 자리는 major
이다. 0
은 초기 개발, 1
부터는 정식 버전을 의미한다. 개발된 버전이 major
와 호환이 안 될 정도로 수정되었을 때 major
버전의 숫자가 올라간다. 만약 1.9.0
버전을 사용하다 2.0.0
으로 업데이트하면 에러가 발생할 확률이 크게 높아진다.
두 번째 자리는 minor
이다. 하위 호환이 되는 기능 업데이트일 때 올린다. 1.1.0
사용자가 1.2.0
으로 업데이트해도 문제가 없어야 한다.
세 번째 자리는 patch
이다. 기존 기능의 문제를 수정한 버전일 때 올린다. 1.1.0
의 버그만 잡았다면 1.1.1
이 된다. 당연히 업데이트해도 문제가 없어야 한다.
버전 앞에 붙는 기호도 의미가 있다.
^
는 해당 버전의 minor
까지만 설치하거나 업데이트한다. ^1.1.1
이라면 1.1.1
이상 2.0.0
미만, 즉 1.x.x
버전만 설치된다.
~
는 patch
까지만 설치하거나 업데이트한다. ~1.1.1
이면 1.1.1
이상 1.2.0
미만, 즉 1.1.x
버전만 설치된다.
>, <, >=, <=, =
는 부등호와 의미가 같다. >=1.1.1
이라면 1.1.1
이상의 버전이 설치된다.
@latest
는 안정된 최신 버전을 설치한다. x
로도 표현한다.
@next
는 가장 최근 버번을 설치한다. 단점은 안정적이지 않을 수 있다는 점이다. 알파나 베타 버전은 x.x.x-alpha.0
이나 x.x.x-beta.1
처럼 표시한다. 출시 직전은 rc(Release Candidate)
를 붙여 x.x.x-re.0
으로 표시한다.
npm outdated
: 업데이트 가능한 패키지 확인npm update [패키지명]
: 패키지 업데이트npm uninstall [패키지명]
/ npm rm [패키지명]
: 패키지 제거npm search [검색어]
: npm
패키지 검색npm info [패키지명]
: 패키지 세부 정보 파악npm login
: npm
로그인. 패키지 배포 시 필요npm whoami
: 로그인한 사용자가 누군지 알림npm logout
: 로그아웃할 때 사용npm version [버전]
: package.json
의 버전을 올린다. major, minor, patch
를 넣어서 해당 부분을 1씩 올릴 수 있다.npm deprecate [패키지명] [버전] [메세지]
: 해당 패키지를 설치할 때 경고 메세지를 띄운다.npm publish
: 자신이 만든 패키지를 배포할 때 사용한다.npm unpublish
: 배포한 패키지 삭제. 24시간 이내에 배포한 패키지만 제거 가능. 다른 사람이 사용할 시 의존성 유지 때문에 이런 제약이 있다.참고
Node.js 교과서 개정 3판
npm 공식 사이트
npm docs
Basemenks - npx 란 무엇인가!! (node JS)