development

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

big-blog 2020. 2. 10. 22:16
반응형

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


내 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?


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.


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

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

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

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


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

npm install --only=prod

devDependencies 만 설치하려는 경우 :

npm install --only=dev

2016 년 에이 POST를 읽으면 다음을 사용하여 원하는 것을 달성하십시오

--only={prod[uction]|dev[elopment]} 

인수는 NODE_ENV에 관계없이 devDependencies 또는 non-devDependencies 만 설치합니다.

에서 : https://docs.npmjs.com/cli/install


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

npm prune --production

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

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

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


"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을 사용해보십시오.


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


노드 애드온을 포함하는 패키지에 대한 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

npm install packageName --save이것을 사용 하면 의존성 에 패키지를 추가하고 , 사용 npm install packageName --save-dev하면 devDependencies가 됩니다.

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


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


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"을 설정하십시오.

행복한 컨테이너화 =)


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


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


npm install --dev will install dev dependencies

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

npm install --prod will install dependencies

참고 URL : https://stackoverflow.com/questions/9268259/how-do-you-prevent-install-of-devdependencies-npm-modules-for-node-js-package



반응형