I. NPM(Nodejs Package Manager)이란?
Node Pacackage Manager. 이하 npm은 이름 그대로 노드 패키지 매니저이다. 세상에는 많은 자바스크립트 프로그래머들이 있고, 그들이 유용한 자바스크립트 패키지들을 이미 만들어 두었고, 그런 코드들이 공개되어 있는 것이 바로 npm이다. npm은 세계 최대 규모의 패키지들을 보유하고 있다. 이러한 패키지들은 노드의 생태계를 더욱 견고하게 만들었다.
npm에 업로드 된 노드 모듈을 패키지라고 부른다. 모듈이 다른 모듈을 사용할 수 있는 것처럼, 패키지도 다른 패키지를 사용할 수 있다. 이러한 관계를 의존 관계라고 한다.
II. package.json
프로젝트를 진행하다 보면 무수히 많은 패키지들을 추가하게 된다. 이러한 패키지들은 저마다 고유한 버전이 있으므로 이것들을 기록해둘 필요가 있다. 이때 설치한 패키지들을 관리하는 파일이 바로 package.json이다.
package.json 에는 사용하고 있는 패키지들의 명세가 작성되어 있기 때문에 프로젝트를 다른 사람에게 공유하고 싶다면 package.json을 공유하여 개발 환경을 빠르게 구축할 수 있다. JAVA에서는 Maven의 pom.xml과 비슷한 역할을 한다고 한다.
package.json은 프로젝트 루트에서 npm init -y 명령어로 생성할 수 있다.
다음은 어느 서버 프로젝트의 package.json 이다.
{
"name": "rudy-project",
"version": "1.0.0",
"description": "This is Rudy's Project",
"scripts": {
"start": "node ./bin/www",
},
"nodemonConfig": {
"ignore": [
"public",
"uploadFiles",
"maintenance",
"src/view",
"src/sass",
"src/src-client",
"node\_modules"
]
},
"dependencies": {
"chalk": "^4.1.0",
"compression": "^1.7.4",
"connect-redis": "^5.1.0",
"ejs": "^3.1.6",
"express": "^4.17.1",
"express-session": "^1.17.1",
"generate-password": "^1.6.0",
"ioredis": "^4.24.2",
"mime-types": "^2.1.29",
"moment": "^2.29.1",
"multer": "^1.4.2",
"nodemailer": "^6.5.0",
"redis": "^3.0.2",
"request-ip": "^2.1.3",
"tedious": "^11.0.5",
"uniqid": "^5.3.0",
"validate": "^5.1.0"
},
"devDependencies": {
"@babel/cli": "^7.13.10",
"@babel/core": "^7.13.10",
"@babel/polyfill": "^7.8.3",
"@babel/preset-env": "^7.13.10",
"babel-loader": "^8.0.6",
"node-sass": "^5.0.0"
}
}
package.json 에서 name 과 version 은 생략할 수 없다. dependencies 에는 프로젝트가 의존하는 패키지들의 이름과 버전을 명시한다. 패키지에서 사용하는 패키지들을 말한다. NPM@5부터는 --save가 기본 옵션이다.
devDependencies 에서는 개발 단계에서만 사용하는 패키지를 명시한다. npm i --save-dev <패키지명> 으로 설치하면 된다.
만약 내가 Git을 통해 프로젝트를 배포 받았다면 프로젝트 루트에서 npm i 를 입력해야 프로젝트가 정상적으로 동작한다. 패키지 파일들은 모두 gitignore 당하기 때문에 package.json 에 명시된 dependencies 를 보고 새로 설치해야 한다.
III. NPM 명령어 정리
명령어 도우미
npm help 또는 npm 명령어 help
실행 관련
_package.json_의 scripts에 있는 start 명령어를 실행하는 부분이다.
만약 start 명령어를 따로 설정하지 않았다면 node server.js가 실행된다.
npm start
npm start
서버를 종료하는 명령어이다.
npm stop
npm stop 후에 다시 npm start를 하는 명령어이다.
npm restart
test 명령어를 실행한다.
npm test
그 이외의 scripts를 실행하는 명령어이다.
예를 들어 scripts에 build 명령어가 있다면, npm run build하면 된다.
npm run <script-name>
설정 관련
cache 폴더의 내용을 확인하고, 가비지 데이터들을 수집하여 삭제하고 무결성을 확인한다.
npm cache verify
설치 관련
package.json를 만드는 명령어. 새로운 프로젝트나 패키지를 만들 때 사용한다.
npm cache verify
특정한 저장소에 있는 패키지를 설치할 수 있다.
주로 Github에만 있는 패키지를 설치할 때 사용한다.
npm install 주소
특정한 버전을 설치할 수 있다.
npm install 패키지@버전
설치한 패키지를 업데이트하는 명령어이다.
npm update
중복된 패키지들을 정리할 때 사용한다. 가끔 쳐주면 용량도 줄이고 좋다.
npm dedupe
조회 관련
node_modules의 위치를 알려준다.
npm root
오래된 패키지가 있는지 알려준다.
오래되었고 _package.json_에 적어둔 버전 범위와 일치하면 빨간색으로, 오래되었지만 버전 범위와 일치하지 않으면 노란색으로 표시된다.
npm outdated
*패키지를 조회하는 명령어이다. 현재 설치된 패키지의 버전과 dependencies를 트리 구조로 표현한다. *
npm ll을 하면 더 자세한 정보를 준다.
npm ls
해당 패키지가 있는 지와, 해당 패키지가 어떤 패키지의 dependencies인지 보여준다.
npm ls [패키지명]
Global 경로에 설치된 npm 목록 조회
npm list -g
npm 명령어 옵션
--save에 관련된 옵션을 통해 dependencies에 어떻게 저장할 것인지 지정할 수 있다.
package.json의 dependencies에 패키지를 등록합니다. (default)
-P, --save-prod
package.json의 devDependencies에 패키지를 등록합니다.
-D, --save-dev
package.json의 optionalDependencies에 패키지를 등록합니다.
-O, --save-optional
dependencies에 패키지를 등록하지 않습니다.
--no-save