npm은 Node Package Manager의 약어로, 이름 그대로 노드 패키지 매니저이다.
대부분의 자바스크립트 프로그램은 패키지라는 이름으로 npm에 등록되어 있어서 특정 기능을 하는 패키지가 필요하다면 npm에서 찾아 설치하면 된다.
2020년 5월 기준, npm에는 125만개에 달하는 패키지가 등록되어 있으며 세계 최대 규모이다.
설치한 패키지의 버전을 관리하는 파일. 같은 패키지라도 버전별로 기능이 다를 수 있어서 프로젝트를 설치할 때 패키지도 동일한 버전을 설치하지 않으면 문제가 생길 수 있기에 버전을 관리하는 파일이 필요하다.
노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json부터 만들고 시작해야한다.
package.json 을 만드는 명령어
$ npm init
패키지를 설치하다보면 메시지 중에 WARN이 나오는데 이것은 단순한 경고이다. ERROR만 진짜 에러이므로 크게 걱정하지 않아도 된다.
package-lock.json의 내용을 보면 node_modules에 들어 있는 패키지들의 정확한 버전과 의존 관계가 담겨있다. npm으로 패키지를 설치, 수정, 삭제할 때마다 패키지들 간의 내부 의존 관계를 이 파일에 저장한다.
node_modules는 언제든지 npm install로 설치할 수 있으며, 깃 같은 버전 관리 프로그램과 같이 사용할 때도 중요한 파일은 package.json 이다.
전역 설치 옵션은 패키지를 현재 폴더인 node_modules에 설치하는 것이 아니라 npm이 설치되어있는 폴더(/usr/local/lib/node_modules)에 설치하는 것이다.
이 폴더의 경로는 보통 시스템 환경 변수에 등록되어 있어서 전역으로 설치한 패키지는 콘솔의 명령어로 사용할 수 있다. 또한 전역 설치한 패키지는 package.json에 기록되지 않는다.
** 전역으로 설치했다고 패키지를 모든 곳에서 사용한다는 의미는 아니다.
노드 패키지들의 버전은 항상 세 자리로 이루어져 있다. 그 이유는 SemVer 방식의 버전 넘버링을 따르기 때문이다.
SemVer는 Semantic Versioning(유의적 버전)의 약어이다. 버전을 구성하는 세 자리가 모두 의미를 가지고 있다는 뜻이다.
1. 0. 7
package.json 에는 SemVer식 외에도 버전앞에 ^,~,>,< 문자가 붙어있다.
$ npm outdated
$ npm update [패키지명]
$ npm uninstall [패키지명]
$ npm rm [패키지명]
$ npm search [패키지명]
$ npm info [패키지명]
** package.json 의 내용과 의존 관계, 설치 가능한 버전 정보 등이 표시된다.
npm adduser
npm whoami //로그인한 사용자가 누구인지 알려줌
npm logout //npm adduser로 로그인한 계정을 로그아웃
npm 공식 사이트에서 가입한 계정으로 로그인하면 된다.
나중에 패키지를 배포할 때 로그인이 필요하지만, 패키지를 배포하지 않을 계획이라면 가입할 필요가 없다.
$ npm version [버전]
$ npm deprecate [패키지명] [버전] [메시지]
$ npm ci
** 더 엄격하게 버전을 통제하여 패키지를 설치하고 싶을 때 사용