[Node] npm 패키지 매니저

찐새·2023년 1월 20일
0

Node.js

목록 보기
6/6
post-thumbnail

1. npm(Node Package Manager)

자바스크립트로 제작된 모듈이 모여 있는 패키지 매니저이다.

대체제로는 yarnpnpm이 있다. 전자는 메타(전 페이스북)에서 제공하는 패키지 매니저이고, 후자는 npm의 성능을 개선한 것이다. 별도로 설치해야 한다.

2. 패키지 관리

2-1. package.json

패키지 버전을 관리하는 파일로, 사용할 패키지의 버전을 기록해 둔다. npmnpm 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

scriptsnpm 명령어를 저장하는 부분이다. npm run [명령어]로 스크립트를 실행한다.

패키지 설치는 npm install [패키지명]으로 설치한다. 이때, 설치하는 패키지와 프로젝트 명이 겹치면 안 된다. --save 옵션을 자주 볼 수 있는데, 이는 dependencies(의존성)에 추가한다는 의미이다. npm v5부터는 기본값으로 설정되어 있어 따로 적지 않아도 된다.

간혹 패키지 설치시 found [숫자] vulnerabilities 혹은 [숫자] [심각도] severity vulnerability 문장을 볼 수 있다. 취약점 검사로 인한 결과이며, npm audit fix 명령어로 npm 스스로 수정한다.

2-2. package-lock.json

패키지를 설치하면 package-lock.json도 함께 설치된다. node_modules에 들어 있는 패키지들의 dependencies가 담긴 파일이다. 정리하자면 package.json은 내가 설치한 패키지 의존성 기록이고, package-lock.json은 설치한 모듈 간의 의존성 기록이다.

2-3. 패키지 설치

한 번에 여러 개의 패키지를 설치하려면 npm install [패키지1] [패키지2] [패키지3] ...으로 나열하여 입력하면 된다. 배포에는 사용하지 않고 개발에만 사용하는 devDependencies(개발 의존성) 패키지는 --save-dev 옵션을 추가하여 설치한다.

peerDependencies가 존재하는 경우, 직접 사용하지는 않지만 해당 패키지가 설치되어 있다는 전제 하에 코드를 작성했다는 의미이다.

전역 설치 옵션도 제공한다. --global을 추가하면 패키지가 전역 설치되어 명령어로 사용할 수 있게 된다.

명령어나 옵션을 줄여서 쓸 수 있다.

  • npm install ➡️ npm i
  • --save-dev ➡️ -D
  • --global ➡️ -g

git 등 버전 관리 프로그램에서 복사한 clone에는 보통 node_modules 없이 package.jsonpackage-lock.json만 존재한다. npm i로 손쉽게 설치할 수 있지만, 상기 두 파일이 변하기 때문에 배포 때는 npm ci를 사용한다. package-lock.json에 적힌 대로 설치된다.

2-4. npx

패키지를 임시로 설치해서 실행하는 용도이다. npx [패키지]를 입력하면 package.json에 설치하지 않고 임시로 사용 가능하다. 혹은 기록은 필요하나 전역 설치를 기피한다면 devDependencies에 설치한 후 CLI를 실행할 수도 있다. 예를 들어, 패키지의 최신 버전을 체크하는 npm-check-updates가 필요하지만 전역 설치가 싫다면 npm i -D npm-check-updates 설치 후 npx ncu로 실행할 수 있다.

3. 패키지 버전

노드 패키지의 버전은 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으로 표시한다.

4. 기타 npm 명령어

  • 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)

profile
프론트엔드 개발자가 되고 싶다

0개의 댓글