npm / npx 차이, --save-dev, --production 옵션

메린·2024년 3월 14일

npm

Node Package Module, 자바스크립트 런타임 환경 Node.js의 기본 패키지 관리자
자바스크립트 환경의 프로젝트에서 사용 빈도가 높다.
node.js를 설치함과 동시에 시스템에 설치된다.
Node프로젝트의 패키지 및 모듈은 npm을 사용해 설치된다.

  • 전역적(Global)으로 설치
    npm install package-name --global
  • 특정 프로젝트에만 의존성(Dependency) 라이브러리를 설치
    npm install package-name -D

npx

Node Package eXecute, npm 패키지 실행 도구
npm이 패키지 관리자라면 npx는 실행 도구다.
패키지를 설치하지 않고 실행할 수 있게 도와주는 모듈이다.
모듈을 로컬에 직접 설치하지 않기 때문에 최신 버전의 파일을 불러와 실행 후 삭제하는 방식이다.

왜?

글로벌 모듈을 설치하게 되면 몇 가지 문제가 생긴다.

  • 모듈이 업데이트 될 때마다 직접 재설치해야 한다.
  • 업데이트를 했다 하더라도 프로젝트마다 다른 버전을 요구한다면 진행에 문제가 생긴다.
  • create-react-app같은 모듈 경우 업데이트가 잦기 때문에 매번 최신 버전을 유지하는 편이 낫다. npm은 이런 점을 보완하기 힘들다.

마지막에서 언급한 create-react-app, CRA를 npx를 통해 설치한다면 버전을 신경 쓰지 않아도 된다는 장점이 있다.

+ --save-dev?

가끔 패키지를 설치할 때 --save-dev를 사용하는 경우가 종종 있다.

옵션 없이 npm i package-one 시 package.json의 "dependencies" 필드에 패키지가 작성되어 있다.

npm i package-two --save-dev 와 같이 옵션과 함께 설치하면 "devDependencies" 필드에 패키지가 작성된다.
예시

{
  "name": "my-project",
  "version": "0.1.0",
  "dependencies": {
	"package-one": "0.1.1",
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
  },
  "devDependencies": {
    "package-two": "0.1.1",
  }
}

필드 이름에서 추측할 수 있듯이 각 필드에 포함되는 패키지는 하나의 프로젝트에서 아래와 같이 구분된다.

  • 배포 시 필요한 패키지는 dependencies
  • 개발 단계에서 필요한 패키지는 devDependencies

협업 시 프로젝트를 공유하는 과정에서 node_module을 함께 넘겨주게 되면 용량이 너무 커지기 때문에 구분이 필요하다.
package.json을 넘겨받는다면
npm install
을 통해 dependencies, devDependencies의 패키지 설치가 가능하다.

  • --production 옵션을 붙여서 install하게되면 devDependencies는 제외하고 설치된다.

0개의 댓글