[node.js 기초] npm 소개 및 활용 ft. package.json

Node Package Manager

npm은 Node Package Manaer 의 줄임말로써, Node.js 표준  패키지 관리 도구이다. Python의 pip이나 Ruby의 gem 처럼 모듈과 데스크톱 앱등의 Node.js 패키지들을 명령어로 손쉽게 관리 할 수 있다. npm install 명령을 사용하여, npmjs.com 에 존재하는 수많은 패키지들을 설치, 삭제등의 관리를 할 수 있다. 단순히 npm install <모듈명> 등으로 모듈을 설치하는 것만이 아닌, node.js 나 React 등의 프로젝트에서 전반적으로 도움이 되는 기능들을 가지고 있다. 일반적으로 node.js를 설치하게 되면, 같이 설치되기 때문에 설치과정은 생략한다.

package.json

node.js 로 개발된 여러 프로젝트 디렉토리를 살펴보면, 거의 대부분 package.json 이라는 파일을 가지고 있다. package.json 파일에는 node.js 프로젝트의 기본적인 정보 (이름 및 버전 등) 와 의존성 모듈 (dependencies) 의 정보가 담겨 있다. package.json 은 대게 아래 형태로 작성되어 있다.

{
  "name": "sample-package",
  "version": "1.0.0",
  "description": "Hello World!",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "L0GIC",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.2",
    "mongoose": "^5.0.2"
  }
}

프로젝트를 시작할 때 마다 package.json 파일을 수동으로 작성하는 것은 분명 비효율적이다. npm에서는 몇가지 정보만 입력하면 자동으로 package.json 작성을 해준다. 프로젝트 디렉토리에서 아래의 명령어를 입력해보자.

npm init

위 명령어를 입력하면 프로젝트의 이름, 버전, 라이센스, 작성자 등의 간단한 정보를 입력받고 package.json 파일을 생성해준다. 그렇다면 의존성 모듈에 관한 정보는 어떻게 입력될까?

패키지 설치 및 의존성 관리

본 글에서는 node.js 환경에서 가장 많이 쓰이는 express.js 라는 웹 프레임워크를 설치해보도록 하겠다. 프로젝트 폴더에서 아래의 명령어를 입력하자.

npm install express

npm install <모듈명> 을 입력하면, 명령을 실행한 디렉토리 내부에 node_modules 라는 새로운 디렉토리가 생기게 되는데, 모든 로컬 모듈은 해당 디렉토리에 보관된다. 여러 모듈을 동시에 설치하고 싶다면, 다음과 같이 입력한다.

npm install express mongoose

위와 같이 명령어를 입력하면, express 모듈과 mongoose 모듈이 동시에 설치된다.

글로벌 설치

npm install -g <모듈명>

-g 옵션으로 babel, webpack 처럼 모듈을 전역으로 사용할 수 있게 설치할 수 있다. 글로벌 설치 과정은 기본적으로 시스템 디렉토리에 설치가 되므로 리눅스 환경에서는 sudo 명령어로 실행해야 하며, 윈도우 환경에서는 관리자 권한이 필요하다.

package.json 에 의존성 모듈 정보 자동 추가

npm install --save <모듈명>

위와 같이 입력하면, 해당 모듈을 설치함과 동시에  package.json dependencies 부분에 자동으로 해당 모듈을 추가하게 된다.

npm install --save-dev <모듈명>

또한 -save-dev 옵션은 개발 환경에서만 사용할 의존성 모듈을 설치할 때 사용 하는 옵션이다. package.json devDependencies 에 추가되며, 실질적으로 어떤 부분이 다른지는 아래에서 설명하겠다.

의존성 모듈 자동 설치

package.json 이 있는 디렉토리에서 아래의 명령어를 입력하면, package.json의 dependencies와 devDependencies 에 명시된 모든 모듈이 버전에 맞춰 설치된다.

npm install

하지만, devDependencies에 명시된 모듈들은 개발할 당시에만 사용하기 위해 설치된 것이다. 개발용으로 명시된 의존성 모듈을 제외하고 설치하기 위해서는 아래의 옵션을 사용한다.

npm install --product

스크립트 사용

package.json 을 보면 scripts 라는 부분이 존재한다. 여기서 여러 복잡한 명령어들을 npm script 로 만들어서 간단하게 만들 수 있는데, 다음과 같다.

{

  ...

  "scripts": {
    "start": "node app.js",
    "build": "webpack ./src/app.js ./out/bundle.js"
  },

  ...
}

scrips 의 각 key (start와 build 부분) 를 사용하여, 각 key의 우측 명령어를 실행시킬 수 있다. 이때는 아래와 같은 명령어를 사용한다.

npm run <스크립트_이름>

즉, package.json 이 존재하는 디렉토리에서 npm run build 라는 명령어를 입력하면 webpack ./src/app.js ./out/bundle.js 라는 명령어가 실행되는 셈이다. 여러 옵션을 사용한 빌드 명령어를 자주 사용할 때 유용하다. 여기서 start 라는 스크립트는 특별히 npm run start 대신 npm start 만 입력해도 무방하다.

모듈 변경

제거

npm uninstall <모듈명>

업데이트

npm update <모듈명>

역시 –save 옵션을 사용하여, 의존성을 관리할 수 있다.