npm 이란

npm이란 Node Package Manager의 약자이다. 이름에서 유추 할수 있는지 Node로 만들어진 모듈을 패키지화하여 관리하는 해주는 프로그램이다.


npm 명령어

package.json 생성

npm init 명령어를 실행하면 package.json 파일을 생성해준다. package.json 파일은 프로젝트 의존모듈 관리 및 프로젝트 정보를 관리한다. npm init 명령어를 입력하면 package.json에 들어갈 메타정보를 입력할수 있는 화면을 제공한다.

1
$ npm init

옵션으로 -y으로 설정 할 경우 메타 정보의 입력 없이 모두 default 값으로 package.json을 생성해 준다.

1
$ npm init -y

아래는 생성된 package.json의 내용이다.

1
2
3
4
5
6
7
8
9
10
11
{
"name": "sample", // 프로젝트 명
"version": "1.0.0", // 프로젝트 버전
"description": "", // 프로젝트 설명
"main": "index.js", // node.js에서 사용 되는 것
"scripts": { // 프로젝트를 자동화 할수 있는 쉘 스크립트 입력
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "", // 프로젝트 작성자
"license": "ISC" // 라이센스 정보
}

패키지 설치

npm install(npm i) 명령어는 package.json 파일의 dependency에 있는 모듈을 모두 설치해 준다.

1
2
$ npm install <package>
$ npm i <package>

npm install의 옵션으로 –save 사용한 경우 package.json의 dependency에 추가시켜 준다. 하지만 npm 버전 5 이상부터는 –save 옵션을 사용하지 않아도 자동으로 dependency에 추가해 준다.


–save-dev 옵션을 사용하는 경우에는 devDependency에 추가해준다. devDependency란 개발시에만 사용하는 개발용 의존 패키지를 작성할때 사용한다. 축양형은 -D를 사용한다.


그리고 패키지명 뒤에 @유의적버전을 붙여주면 해당 버전으로 설치할수 있다.

1
2
3
$ npm install --save <package>
$ npm install --save-dev <package>
$ npm install --save-dev package@유의적버전

패키지 삭제

1
2
3
4
# 로컬/개발 패키지 제거
$ npm uninstall <package-name>
# 전역 패키지 제거
$ npm uninstall -g <package-name>

패키지 업데이트

1
$ npm update <package-name>

스크립트 실행하기

package.json의 scripts에서 작성했었던 스크립트를 실행할수 있다. npm에서는 수많은 명령어를 제공해주는데 이것 이외에 스크립트를 통해서 추가한 명령을 실행할때 사용한다.

1
$ npm run <script-name>

패키지 설치 방법

1. CDN 방식(컨텐츠 전송 방식)

콘텐츠 전송 네트워크(이하 CDN)는 콘텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장하여 제공하는 시스템을 말한다. 인터넷 서비스 제공자에 직접 연결되어 데이터를 전송하므로, 콘텐츠 병목을 피할 수 있는 장점이 있다.
하지만 이 방식의 단점으로는 서버장애시 사용이 불가능 하다는 단점이 있다. 그리고 네트워크의 속도에 영향을 받기가 쉽다.


2. 직접 다운 받아 사용하기

해당 방법은 패키지를 제공하는 곳에서 직접 다운 받아서 사용하는 방법 이다. 이렇게 사용하면 서버의 장애와 무관하게 사용이 가능하다.
하지만 패키지가 업데이트 될 경우 직접 수동으로 다시 다운 받아서 관리를 해야하는 번걸움이 존재한다.


3. npm 이용하기

npm install 패키지명으로 손쉽게 설치가 가능하다. 직접 다운 받는 것보다 훨씐 편하게 버전 관리가 가능하다.


유의적 버전 범위

npm은 API의 버전을 관리 할때 유의적 범위를 사용한다. 아래의 버전 범위 표기법을 이용하여 업데이트 될 버전의 범위를 지정할수 있다.

표기법 설명
version 명시된 version과 일치
>version 명시된 version보다 높은 버전
>=version 명시된 version보다 높거나 같은 버전
<version 명시된 version보다 낮은 버전
<=version 명시된 version보다 낮거나 같은 버전
~version 패치버전을 변경하는 버전
^version 마이너버전을 변경하는 버전

여기에서 주목해야 할 것은 ~(틸드)와 ^(캐럿)이다.


~(틸드)

~(틸드)는 마이너 버전이 명시되어 있으면 패치버전을 업데이트 하고, 마이너 버전이 없으면 마이너 버전을 업데이트 한다.

  • ~1.1.0 : 1.1.0 <= version < 1.2.0
  • ~1.1.1 : 1.1.1 <= version < 1.2.0
  • ~1 : 1.0.0 <= version < 2.0.0

^(캐럿)

^(캐럿)은 마이너와 패치 버전 내에서 업데이트를 한다.

  • ~1.1.0 : 1.1.0 <= version < 2.0.0
  • ~1 : 1.0.0 <= version < 2.0.0

https://semver.npmjs.com 해당 사이트를 통해서 유의적 버전 범위에 따라서 어떤 버전을 사용하는지 대해서 알아볼수 있다.

위의 사이트를 통해 확인 결과 정식미만버전(0.y.z)의 경우에는 ~, ^ 모두 마이너버전까지 명시한경우 패치 버전만 업데이트를 한다고 나온다.