본문 바로가기

자료

[node.js] package.json 이용 패키지 관리 / 배포시 처리 방법

728x90

[node.js]  package.json 이용 패키지 관리 / 배포시 처리 방법


1. package.json

 

node.js 프로젝트 진행시 여러 패키지를 내려받아 설치하게 되는데 설치한 패키지의 버전 등 정보를 담아두는 파일이 package.json입니다.

 

pckage.json파일은 설치한 패키지의 버전이 기록되어 있어서 개발한 node.js프로젝트를 재배포할 때 일치하는 패키지를 설치할 수 있도록 도와줍니다. 같은 패키지라 하더라도 버전이 다르면 프로그램이 제대로 동작하지 않는 문제가 발생할 수 있으므로 설치된 각 패키지에 대한 버전 관리가 필요한 것입니다.

 

package.json파일을 생성하려면 npm init 명령을 사용합니다.

 

명령을 실행하면 여러가지 질문이 나오게 되는데 대부분은 version, name 등을 제외하고는 굳이 입력해둘 필요는 없습니다. 개발한 node.js프로젝트를 오픈소스로 git에 올리고자 한다면 git이나 license 등의 정보를 추가로 입력할 필요가 있을 수 있습니다.

 

package.json 파일을 만들어둔 뒤에 다음과 같이 npm을 설치하게 되면 해당 패키지의 이름과 버전이 파일에 기록됩니다. 만약 하나의 패키지가 설치될때 필요한 여러 패키지들이 같이 설치되는 경우 package-lock.json 파일(외 존성을 파악하기 위함)이 생성돼 설치된 패키지의 버전을 기록하는 경우도 있고 실제로 이와 같은 패키지 설치가 진행되면 node_modules 디렉터리를 생성하여 설치한 패키지들을 모아놓게 됩니다.

 

추후에 node.js프로젝트를 배포하는 경우 실제 node_modules는 제거하고 json파일만 배포해 다시 설치하는 방식으로 진행합니다. node_modules까지 배포하게 되면 용량이 너무 커지는 경우가 있기 때문입니다.


2. npx

 

어떤 패키지의 경우 'npm i -gl <패키지명>'을 통해 글로벌로 패키지를 설치할 수 있습니다. 문제는 글로벌로 설치되는 패키지는 package.json에 버전이 기록되지 않기 때문에 다른 사람에게 프로젝트 배포 시 실제 글로벌로 설치된 패키지를 사용하는지 package.json만 보고서는 확인할 수 없게 됩니다.

 

이러한 문제를 피하기 위해서 패키지를 비글로벌로 설치하고 npx를 통해 해당 패키지를 글로벌로 사용할 수 있도록 변환합니다.


3. SemVer

 

유의적 버저닝이라고 하는데 버전 체게를 Major, Minor, Patch 세 가지로 나눠 1.0.0 과 같이 유지하는 버전을 의미합니다. Patch는 간단한 수정의 경우, Minor는 기능적 수정인데 하위 버전과 호환성을 해치지 않는 경우의 수정입니다. 마지막으로 Major는 대규모 수정이며 이때는 하위 버전과의 호환성을 보장하지 않게 됩니다.

 

버전에 대한 숫자이외에 다양한 기호들도 사용되는데 대략적으로 다음과 같은 것들이 있습니다.

^ minor 까지 버전
~ patch 까지 버전
>= 해당 버전 이상버전
<= 해당 버전 이하버전
> 해당 버전을 넘는 버전
> 해당 버전을 넘지 않는 버전
@latest 최신 버전
@next 출시 예정 버전

이전에 package.json에 관해서 알아볼 때 패키지의 버전을 관리한다고 했었는데 실제 파일을 열어보면

{
  "name": "test",
  "version": "1.0.0",
  "description": "테스트 입니다.",
  "main": "test.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "cliel",
  "license": "ISC",
  "dependencies": {
    "download": "^8.0.0"
  }
}

downlaod의 경우 버전앞에 ^ 표시가 붙어 있음을 알 수 있습니다. ^의 경우 Minor버전까지를 의미하므로 Major버전은 유지하고 그 이하의 버전들만 업데이트를 허용한다는 의미가 됩니다. 향후 패키지를 업데이트할 때 해댱 규칙을 따르게 되는 것이죠.

 

또한 패키지를 설치할때 'npm i download@latest'처럼 최신 버전을 설치하거나 'npm i download@next'로 정식으로 출시돼 지전 버전을 미리 받아서 사용해 볼 수 있습니다.


4. 기타 npm 명령어 (npm 명령어)

outdated 패키지 변경 내역 확인
uninstall 패키지 삭제
search 패키지 검색
info 패키지 정보 확인
login npm에 로그인
logout npm에 로그아웃
whoami 현재 사용자 확인
version package.json의 버전 올림
deprecate 패키지 설치시 경고 메세지 설정
publish 패키지 배포
unpublish 패키지 배포 취소(72시간 안에만 가능)

 

728x90