Node.js (package.json) 용 "devDependencies"NPM 모듈 설치를 어떻게 방지합니까?


587

내 package.json 파일 (단축 버전)에 이것을 가지고 있습니다 :

{
  "name": "a-module",
  "version": "0.0.1",
  "dependencies": {
    "coffee-script":      ">= 1.1.3"
  },
  "devDependencies": {
    "stylus":             ">= 0.17.0"
  }
}

Mac 10.6.8에서 NPM 버전 1.1.1을 사용하고 있습니다.

프로젝트 루트에서 다음 명령을 실행하면 dependencies and가 모두 설치됩니다 devDependencies.

npm install

이 명령이 다음을 설치했다는 인상을 받았습니다 devDependencies.

npm install --dev

어떻게 그렇게해야합니까 npm install에만 설치 dependencies(생산 환경 만 모듈을 얻을 수 있도록) 동안 같은 npm install --dev설치 횟수 모두 dependenciesdevDependencies?


1
문서에 따르면 옳습니다. --dev는 devdeps를 설치하고 그렇지 않으면 dep 만 설치합니다. npmjs.org/doc/json.html . 나는 이것이 명명 된 패키지에서 작동한다는 것을 알고 있습니다.
mna

1
2015 년에이 질문을 발견하면 --save-dev 스위치가이 질문에서 요청한대로 트릭을 수행합니다.
Anand

1
이 답변의 stackoverflow.com/a/22004559/3718119은 차이에 대한 좋은 설명을 제공 dependencies하고 devDependencies때 그들 각각 사용된다.
quasoft

답변:


844

npm install명령은 개발 환경 (디폴트)의 패키지 디렉토리 내에서 실행될 때 devDependencies서로 를 설치합니다 dependencies.

사용 npm install --only=prod(또는 --only=production) 설치 뿐만 dependencies 아닌 devDependencies,관계없이 값의 NODE_ENV환경 변수.

출처 : npm docs

참고 : NPM (2015년 8월 13일)의 전 V3.3.0은 옵션이 불렀다 --production즉, npm install --production.


2
Agate의 추론은 devDependencies를 제거하여 패키지를 설치하는 소비자 npm install yourpackage.tgz가 devDependencies도 얻지 못하게하는 것일 수 있습니다. 그러나 이미 그러한 경우입니다. 아래의 Kevin Cox의 답변을 참조하십시오 ( stackoverflow.com/a/15826602/825588 ).
Johann

5
npmjs.org/doc/cli/npm-install.html "기본적으로 npm 설치는 종속성으로 나열된 모든 모듈을 설치합니다. --production 플래그를 사용하면 npm은 devDependencies에 나열된 모듈을 설치하지 않습니다."
tomByrer

14
세상에. 나는 내가 NODE_ENV=production하고있는 다른 일을 완전히 가지고 있었고 왜 npm install의존성을 설치하지 않는지 내 인생을 알 수 없었습니다. 철저한 답변에 감사드립니다.
aendrew

1
npm install --dev 개발자 의존성 만 설치
Rustem K

10
npm 3.3 이상 : npm WARN 설치 --dev옵션 사용이 더 이상 사용되지 않습니다. --only=dev대신 사용하십시오 .
srcspider

232

나도 그 문제에 부딪쳤다! npm 설치는 다소 혼란스럽고 웹 게시물은 명시적인 '개발'설치 모드가있는 것처럼 -d /-dev 플래그를 계속 가져옵니다.

  • npm install" 종속성 "및 " devDependencies "를 모두 설치합니다.

  • npm install --production" 종속성 " 만 설치합니다

  • npm install --dev" devDependencies " 만 설치합니다


29
경고 : NODE_ENV로 설정되어 production있고 실행 npm install하면 개발자 종속성이 설치되지 않습니다. Dockerfile 에서이 문제가 발생했습니다.
vaughan

1
@vaughan 나도 이것에 부딪쳤다, 실행하여 해결할 수있다 npm --production=false install(이것이 --dev 플래그와 함께 작동하는지 확실하지는 않지만)
Bavell

138

새로운 옵션은 다음과 같습니다.

npm install --only=prod

devDependencies 만 설치하려는 경우 :

npm install --only=dev

1
이것은 질문의 반대에 대한 답변입니다. OP는 devDependencies를 설치하지 않는 방법을 묻습니다.
musicin3d

2
당신은 @ musicin3d를 부분적으로 정확하기 때문에 첫 번째 부분에서는 prod 만 종속성을 설치하는 방법과 두 번째 부분은 경우에 따라 dev 만 의존성을 설치하는 방법에 대답했습니다.
Cloxure

5
저기요 @ user1614572가에 대한 부분을 추가하기 전에 그 의견을 남겼습니다 --only=prod. 귀하는 부분적으로 정확합니다. ; P
musicin3d

배포에 대한 별도의 종속성을 포함시킬 수 있습니까?
Jeeva Jsb

1
답변이 아니라 의견입니다. 정기적으로 모든 의견을 확인하지는 않습니다. 사람들이 몇 년 전에 의견 을 업데이트하는 것을 본 적이 없습니다 . 당신은 기본적으로 내가 나의 의견에 1 년을 걸었다는 것을 비판하기 위해 여기에 왔습니다. 더 이상 응답하지 않습니다. 다른 사람들을 트롤 재미있게 보내십시오.
Jacques ジ ャ ッ ク


33

모든 종속성을 이미 설치했고 NPM에서 프로덕션 패키지를 다시 다운로드하지 않으려면 다음을 입력하면됩니다.

npm prune --production

이렇게하면 node_modules폴더 에서 개발자 종속성이 제거되므로 다음 과 같은 2 단계 프로세스를 자동화하려는 경우 유용합니다

  1. 개발자 의존성을 사용하여 프로젝트를 Webpack
  2. 프로덕션 모듈 만 사용하여 Docker 이미지 빌드

npm prune중간에 실행 하면 모든 것을 다시 설치하지 않아도됩니다!


19

"npm install"을 사용하면 모듈이 "devDependencies"인지 "dependencies"인지에 관계없이 응용 프로그램 전체에로드되어 사용 가능합니다. 이 아이디어의 요약 : package.json이 종속성 (모든 유형)으로 정의하는 모든 것이 node_modules에 설치됩니다.

dependencies / devDependencies / optionalDependencies의 차이점은이 코드를 설치하기 위해 npm없이 코드 소비자가 할 수있는 것입니다.

문서 당 : https://npmjs.org/doc/json.html ...

누군가 자신의 프로그램에서 모듈을 다운로드하여 사용할 계획이라면 아마도 사용하는 외부 테스트 또는 문서 프레임 워크를 다운로드하거나 빌드하지 않아도됩니다.

이 경우 이러한 추가 항목을 devDependencies 해시에 나열하는 것이 가장 좋습니다.

--dev configuration 플래그가 설정 될 때마다 설치됩니다. 이 플래그는 npm 링크를 수행하거나 패키지 루트에서 npm을 설치할 때 자동으로 설정되며 다른 npm 구성 매개 변수와 같이 관리 할 수 ​​있습니다. 주제에 대한 자세한 내용은 config (1)를 참조하십시오.

그러나이 질문을 해결하기 위해 npm을 사용하여 "종속성"만 설치하려는 경우 다음 명령은 다음과 같습니다.

npm install --production

이것은이 필터를 추가 한 Git 커밋 (이 기능을 제공하기 위해 아래에 나열된 다른 필터와 함께)을 보면 확인할 수 있습니다.

npm에서 사용할 수있는 대체 필터 :

--save          => updates dependencies entries in the {{{json}}} file
--force         => force fetching remote entries if they exist on disk 
--force-latest  => force latest version on conflict
--production    => do NOT install project devDependencies
--no-color      => do not print colors

@dmarr는 npm install --production을 사용해보십시오.


16

npm은 패키지 내부에서 설치할 때 ( package.json현재 디렉토리에있는 경우) dev 종속성을 설치 합니다. 다른 위치 (npm 레지스트리, git repo, 파일 시스템의 다른 위치)에서 온 경우 종속성 만 설치합니다.


개혁 해 주시겠습니까? 나는 당신이 당신의 괄호에 실수를했다고 생각합니다, 당신이 그것을 일찍 닫는 것을 잊어 버렸고 당신의 frase는 나에게별로 이해가되지 않습니다 (비 영어 원어민). Rohan Singh의 답변에 대한 Johann의 의견은 (내 의심은 마노의 의심과 정확히 같았 기 때문에) 당신의 대답을보고, 성공하지 못했다고 지적했습니다. 여전히 npm install some-module개발자 의존성을 설치 하지 않는 방법 을 얻지 못했습니다 some-module.
Rafael Eyng

고마워요 그러나 귀하의 나머지 질문은 이해하지 못합니다.
Kevin Cox

3

노드 애드온을 포함하는 패키지에 대한 dev 의존성을 설치하려고 할 때 devDependencies를 설치하려는 경우에도 npm install --dev를 실행할 때 애드온 빌드를 피할 수 없다는 것을 알았습니다. 그래서, 나는 npm의 뒤로 돌아 가야했습니다.

node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed  -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install

아니면, 더 나은 (그리고 간결하게) 아직,

node -e 'Object.keys( require( "./package.json" ).devDependencies )
.map( function( item ){ console.log( item ) } );' | xargs npm install

3

사용 npm install packageName --save에 패키지를 추가 할 것입니다이 종속성을 사용하는 경우, npm install packageName --save-dev다음 devDependencies을 .

npm install packageName --save-dev개발 목적으로 패키지를 추가하는 데 사용해야합니다. TDD 패키지 (Chai, mocha 등)를 추가하는 것과 같습니다. 개발에 사용되며 프로덕션에는 사용되지 않습니다.


OP는 종속성을 저장하는 데 문제가 package.json없지만 이러한 종속성이 이미 저장된 후에는 npm특정 유형의 종속성 만 설치 하도록 강제하는 방법 입니다. 여기서 답변을 읽을 때 OP가 제기 한 문제를 해결하는 데 도움이되는 내용은 배우지 않았습니다.
Louis

3

NODE_ENV환경 변수를 사용 하여 동일한 결과를 얻을 수 있다고 언급 할 가치가 있습니다. Node 애플리케이션 (예 : Docker)을 컨테이너화 할 때 특히 유용합니다.

NODE_ENV=production npm install

위의 코드는 모든 의존성을 제외하고 개발자 (예 :)를 설치합니다 devDependencies.

환경 변수를 사용해야하는 경우 Dockerfile자세한 정보는 여기를 참조하십시오 .

필요할 때마다 환경 변수를 쉽게 덮어 쓸 수 있습니다 (예 : 테스트 스위트를 Travis CI에서 실행하려는 경우). 이 경우 다음과 같이 할 수 있습니다.

docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install

여기 NPM 설명서

생산

  • 기본값 : false
  • 유형 : 부울 "제작"모드에서 실행하려면 true로 설정하십시오.

    1. 인수없이 로컬 npm 설치를 실행할 때 devDependencies가 최상위 레벨에 설치되지 않습니다.
    2. 라이프 사이클 스크립트에 대해 NODE_ENV = "production"을 설정하십시오.

행복한 컨테이너화 =)


3

사용하는 것이 좋습니다 npm ci. 프로덕션에 필요한 패키지 만 설치하려면 (없이-작성 devDependencies) 다음을 수행하십시오.

npm ci --only=production

또는

NODE_ENV=production npm ci

oldschool npm install을 선호하는 경우 :

npm install --production

또는

NODE_ENV=production npm install

왜 당신이 사용해야하는 좋은 대답npm ci 입니다.


쿨, 그것은 npm ci뿐만 아니라뿐만 아니라 작동합니다 npm install!
Klesun

2

선택한 답변에 추가해야 함 : 현재 npm install패키지 디렉토리 (포함 package.json)는 devDependencies를 설치하지만 설치하지는 npm install -g않습니다.


7
예, -g설치 devDependencies하지 않지만 패키지를 전체적으로 설치하므로 의도 한 결과가 아닙니다.
Bardi Harborow

0

npm install --production프로덕션에 필요한 노드 모듈을 설치하는 올바른 방법입니다. 자세한 내용은 설명서를 확인하십시오.


-1

npm 5+와 함께 package-lock.json이 있으면 문제가 있습니다. 를 사용하기 전에 제거해야합니다 npm install --production.


-1
npm install --dev will install dev dependencies

그리고 의존성 만 설치하는 질문에 따라 다음 명령이 도움이 될 것입니다.

npm install --prod will install dependencies
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.