본문 바로가기

Node.js

Node.js - 노드 패키지 매니저 (Node Package Manager, npm)

노드 패키지 매니저 기본 사용법 (패키지 설치)

 

노드의 패키지 매니저인 npm (Node Package Manager) 에 대해 알아보자.

 

먼저 패키지의 관리를 알아보자. 패키지의 관리는 package.json 이라는 파일에서 한다. 서비스에 필요한 패키지를 하나씩 추가하다 보면 일일이 관리하기 어려워질 수도 있다. 또한 패키지는 버전마다 그 기능이 달라질 수 있다. 따라서 패키지의 버전을 어딘가에 기록해두어야 한다. 따라서 노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json부터 만들고 시작해야 한다. npm은 이를 만드는 명령어 (npm init) 를 제공한다.

 

콘솔에 npm init을 쳐서 package.json 파일을 만들어보자. npm init을 입력하면 여러 정보들을 입력해줄 수 있는데, 입력을 완료하면 아래와 같은 파일이 만들어진다.

 

{
  "name": "npmtest",
  "version": "0.0.1",
  "description": "hello~",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Beom Seok Kang",
  "license": "ISC"
}

 

위에서 scripts 부분은 npm 명령어를 저장해두는 부분이다. 콘솔에서 npm run [스크립트 명령어] 를 입력하면 해당 스크립트가 실행된다. 예를 들어, npm run test를 치면 위에 쓰인것처럼 실행될 것이다. echo는 콘솔에 해당 문자열을 출력하라는 뜻이고, exit 1은 에러와 함께 종료하라는 뜻이다.

 

scripts 속성에 명령어 여러 개를 등록해두고 사용할 수 있다. 보통 start 명령어에 node [파일명] 을 저장해두고 npm start로 실행한다.

 

이제 패키지들을 설치해보자. Express를 먼저 설치해보자. npm install express를 콘솔에 입력하여 설치한다.

 

PS C:\Users\bumsu\nodejs-projects\노드js교과서\5> npm install express
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN npmtest@0.0.1 No repository field.

+ express@4.17.1
added 50 packages from 37 contributors and audited 50 packages in 2.177s
found 0 vulnerabilities

 

메시지 중, WARN이 나오는데, 이는 걱정하지 않아도 된다. ERROR만이 진짜 에러고 WARN은 단순한 경고다. 이제 package.json 파일을 다시 보자.

 

{
  "name": "npmtest",
  "version": "0.0.1",
  "description": "hello~",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Beom Seok Kang",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  }
}

 

dependencies라는 항목이 추가되었고, 그 안에 방금 설치한 express의 버전 정보가 함께 담겼다. 

 

또한, 보면 node_modules 라는 폴더가 생성되었고 그 밑에 노드의 다른 패키지들이 설치가 되었다. 이는 Express가 그대로 존재하는 것이 아니라 Express 또한 다른 패키지들에 의존하기 때문이다. 모듈이 다른 모듈을 사용할 수 있는 것처럼, 패키지 또한 다른 패키지를 사용할 수도 있다. 이런 관계를 의존 관계라고 부른다. 그리고 이러한 패키지들은 또 다른 패키지에 의존하고, 이런 형식이다. 따라서 이러한 복잡한 의존관계 때문에 package.json으로 관리를 해주는 것이다.

 

참고로 node_modules 폴더는 지우더라도 package.json 파일에 dependencies로 저장돼있다면 언제든 관련 패키지들을 다시 그대로 설치할 수 있다. npm install만 하면 알아서 다시 설치가 된다. 즉, node_modules는 보관할 필요가 없다. 깃 같은 버전 관리 프로그램과 같이 사용할 때에도 node_modules는 커밋하지 않는 이유이다.

 

또한 보면 package-lock.json이라는 파일도 생겼다. 이 파일은 직접적으로 설치한 express 외에도 node_modules에 들어 있는 패키지들의 정확한 버전과 의존관계가 담겨 있다.

 

이제 다른 필요한 패키지들을 추가로 설치해보자. 여러 개를 동시에 설치하고 싶으면 띄어쓰기로 구분하여 패키지 명들을 npm install 뒤에 적어주면 된다. morgan. cookie-parser, express-session을 추가로 설치해줬다.

 

PS C:\Users\bumsu\nodejs-projects\노드js교과서\5> npm install morgan cookie-parser express-session
npm WARN npmtest@0.0.1 No repository field.

+ express-session@1.17.1
+ cookie-parser@1.4.5
+ morgan@1.10.0
added 10 packages from 5 contributors and audited 60 packages in 1.898s
found 0 vulnerabilities

 

개발용 패키지도 설치할 수 있다. 실제 배포 시에는 사용되지 않고 개발 중에만 사용되는 패키지들을 뜻한다. npm install --save-dev [패키지] 로 설치한다. 소스 코드가 바뀔 때마다 자동으로 노드를 재실행해주는 패키지인 nodemon을 설치해보자.

 

{
  ...
  "devDependencies": {
    "nodemon": "^2.0.4"
  }
}

 

package.json 파일에 위와 같은 항목 (devDependencies) 가 추가되었다. 이는 개발용 패키지들만 따로 관리해준다.

 

npm에는 전역 (global) 설치라는 옵션도 있다. 패키지를 현재 폴더의 node_modules가 아닌 npm 자체가 설치되어 있는 폴더에 설치한다. 이 폴더의 경로는 시스템 환경 변수에 포함되어 있으므로 콘솔에서 사용이 가능하다. 전역 설치를 했다고 해서 패키지를 모든 곳에서 사용한다는 뜻은 아니다. 대부분 명령어로 사용하기 위해 전역 설치한다. rimraf라는 패키지를 전역 설치해보자. 전역 설치는 npm install --global [패키지] 명령어를 통해서 한다. rimraf는 리눅스나 맥의 rm -rf 명령어를 윈도우에서도 사용할 수 있게 해주는 패키지다.

 

패키지 버전

노드의 패키지 버전은 세 자리로 이루어져 있다. 노드의 패키지 버전들은 SemVer (Semantic Versioning) 방식의 버전 넘버링을 따른다. 이와 관련된 정보는 아래의 포스트에서 확인하자.

 

https://ggodong.tistory.com/173

 

버전 표기법 (SemVer)

이번 글에선 버전 표기법에 대해서 알아 볼 생각입니다. 버전의 경우엔 개발자라면 많이 접하게 되는데, 이를 잘 이해하고 사용하는 것이 더 훌륭한 개발자로 만드는 방법이라 생각했습니다. 이

ggodong.tistory.com

 

출처

https://ggodong.tistory.com/173

Node.js 교과서 개정 2판 - 길벗, 조현영