Back
Featured image of post [Node.js] npm 개념과 사용법

[Node.js] npm 개념과 사용법

NPM을 활용한 Node.js의 패키지 관리 방법

npm

NodeNode Package Manager, 말 그대로 Node.js 환경에서 여러 모듈들을 패키지화하여 관리하는 저장소 같은 역할이다.
패키지를 직접 만들어 배포할 수 있고 다른 사람이 배포한 여러 패키지 모듈들을 설치해 프로젝트에 적용시킬 수도 있다.

npm 생성하기

npm 환경에서 제일 중요한 것은 패키지 관리이다. 패키지들은 package.json파일에서 일괄적으로 관리하는데 직접 json 파일로 생성해도 되고, 명령어를 입력해 생성해도 된다. 터미널에서 npm init명령어를 입력하면 자동적으로 package.json파일을 생성할 수 있다.

npm init
# > packagename : 프로젝트 이름 입력
# > version : 프로젝트 버전 입력 (default : 1.0.0)
# > description : 프로젝트 간단한 설명
# > entry poin : 자바스크립트 파일 진입 지점 (default : index.js)
# > test command : 테스트 코드 (코드 실행 및 테스트시 필요한 명령어 입력)
# > git repository : git 주소
# > keywords : 패키지 키워드 (npm 패키지 검색 시 사용)
# > author : 작성자
# > license : 패키지 라이센스 (default : ISC) *오픈 소스는 대부분 MIT 라이선스를 사용한다.

위와 같이 init 단계를 마치면 프로젝트 경로에 package.json 파일이 생성된다. 생성할 때 test command입력 부분을 건너뛰었다면 아래와 같이 scripts 속성에 기본 값 test로 정의가 되어 있다. scripts 속성은 스크립트 실행 명령어를 여러개 정의할 수 있다. 대표적으로는 해당 프로젝트 실행 파일을 시작하는 명령어를 start로 지정해둔다.

{
    "name": "npm-test",
    "version": "1.0.0",
    "description": "practice for npm",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "node index.js"
    },
    "author": "jinyisland",
    "license": "MIT"
}

scripts속성에 사용자 지정 명령어를 정의할 수 있는데 해당 프로젝트 터미널에 npm run + command를 입력하면 정의된 스크립트가 실행된다. (예시는 npm run start)

패키지 설치하기

npm install 명령어는 npm에 올라와있는 패키지를 다운로드 받을 수 있는 명령어이다. 해당 패키지 모듈이 의존하는 여러 패키지들도 같이 다운로드 받는다.

# express 패키지 설치 예제
npm install express

여러 옵션들은 아래를 참고. 자주 사용하는 명령어만 적어놨는데 공식 문서에서 더 많은 명령어를 확인할 수 있다.

  • npm install -g : 전역 설치 (주로 직접 커맨드 환경에서 직접 사용할 패키지들에 사용) → package.json에서 관리하지 않으므로 관리할 때 주의
    • 추적이 가능하게 하려면 먼저 install로 설치한 다음, npx명령어로 전역 패키지로 전환할 수 있다.
      npm i -D nodemon
      npx nodemon node_modules
      
  • npm install -S (—save) “package-name”: package.json dependencies 속성에 추가 (npm 5버전부터 기본적으로 install에 적용되어 생략이 가능하다.)
  • npm install -D (—save-dev) “package-name” : package.json devDependencies 속성에 추가 (개발 편의로 설치하는 패키지 모듈은 주로 devDependencies에 설치한다.)
  • npm outdated : 관리중인 패키지의 변화
  • npm dedupe : 중복된 패키지 정리
  • npm update : 패키지 업데이트
  • npm uninstall “package-name”: 패키지 삭제
  • npm search : npm 패키지 검색
  • @version : 특정 버전으로 설치

package-lock.json

모듈들을 설치하다보면 package-lock.json파일이 생기는데, 여러 모듈에서 의존하고 있는 다른 패키지 모듈 버전관리를 위해 만들어진 파일이다.

버전 관리

semver 방식

"dependencies": {
  "express": "^4.17.2"
}

npm 패키지들은 세자리 숫자로 구성되어 있는데 Semver방식을 따른다고 한다.

  • Major : 하위 호환이 되지 않는 업데이트
  • Minor : 이전 버전과의 하위 호환
  • Patch : 간단한 버그 수정

알아두면 좋은 표기

  • ^ : 메이저 버전 하위 호환 (^1.9.6 버전이라면 해당 버전 이하의 1.X.X 버전 패키지들과 호환)
  • ~ : 패치 버전 하위 호환 (~1.9.6 버전이라면 해당 버전 이하의 1.9.X 버전 패키지들과 호환)
  • @latest : 최신 버전 (안정화)
  • @next : 가장 최신 버전 (불안정화)

참고자료