programing

Node.js(package.json)에 대한 "devDependencies" NPM 모듈의 설치를 방지하려면 어떻게 해야 합니까?

telebox 2023. 5. 22. 20:56
반응형

Node.js(package.json)에 대한 "devDependencies" NPM 모듈의 설치를 방지하려면 어떻게 해야 합니까?

제 소포 안에 이것이 있습니다.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 그리고. devDependencies:

npm install

나는 이 명령이 설치된 것으로 생각했습니다.devDependencies:

npm install --dev

어떻게 그렇게 만들까요?npm install만 합니다.dependencies모듈만 ), (으)와 같은 .npm install --dev는 둘 다 합니다.dependencies그리고.devDependencies?

npm install됩니다.devDependencies다른 한편으로는dependencies패키지 디렉터리 내에서 개발 환경에서 실행되는 경우(기본값).

버전 8.x 이상에서는 플래그를 사용하여 일반 종속성만 설치합니다.

npm install --omit=dev

이것은 설치만 합니다. dependencies그리고 아닌devDependencies가에관이의 NODE_ENV환경 변수입니다.

버전을 6.x 이버사경우를 .--only=prod대신 플래그를 지정합니다.

참조:
의 v3 이전에는 npm(2015-08-13)이라는 .--production를 들어 예를 들어.

npm install --production

또한 필요할 수도 있습니다.--no-optional 깃발

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

  • npm install "Dependencies" "devDependencies"를 모두 설치합니다.

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

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

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

npm install --only=prod

devDependencies만 설치하려는 경우:

npm install --only=dev

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

npm prune --production

그러에개종제거에서 됩니다.node_modules할 때 .

  1. 개발 종속성을 사용하여 내 프로젝트를 웹 팩합니다.
  2. 프로덕션 모듈만 사용하여 도커 이미지 구축

중입니다.npm prune그 사이에 모든 것을 다시 설치하지 않아도 됩니다!

2016년에 이 POST를 읽으신다면, 사용하여 원하는 것을 이루시기 바랍니다.

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

인수를 지정하면 NODE_ENV에 관계없이 devDependencies만 설치되거나 non-devDependencies만 설치됩니다.

출처: https://docs.npmjs.com/cli/install

"npm 설치"를 사용하면 모듈이 "devDependencies"인지 "dependencies"인지에 관계없이 응용 프로그램 전체에서 로드되고 사용할 수 있습니다.이 아이디어의 요약: 당신의 패키지에 있는 모든 것.json은 node_dll에 설치되는 종속성(모든 유형)으로 정의합니다.

종속성/devDependencies/옵션 종속성 간의 차이의 목적은 코드 소비자가 이러한 리소스를 설치하기 위해 npm으로 수행할 수 있는 작업입니다.

설명서에 따라 https://npmjs.org/doc/json.html ...

프로그램에서 모듈을 다운로드하여 사용하려는 경우 사용하는 외부 테스트 또는 문서 프레임워크를 다운로드하거나 구축할 필요가 없을 수 있습니다.

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

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

그러나 이 문제를 해결하려면 npm을 사용하여 "의존성"만 설치하려면 다음 명령을 사용합니다.

npm install --production

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

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

@dmarry npm install --production을 사용하여 시도합니다.

할 때 합니다(npm이 있는 ).package.json 레지스트리,시스템의 다른 에 있는 합니다.다른 위치(npm 레지스트리, gitrepo, 파일 시스템의 다른 위치)에 있는 경우 종속성만 설치합니다.

를 사용할 것을 제안합니다.npm ci작성한 대로 운영에 필요한 패키지만 설치하려면devDependencies그러면:

npm ci --only=production

또는

NODE_ENV=production npm ci

만약 당신이 오래된 학교를 선호한다면,npm install그러면:

npm install --production

또는

NODE_ENV=production npm install

다음은 사용해야 하는 이유에 대한 좋은 대답입니다.npm ci.

당신이 그것을 사용할 수 있다는 것을 언급할 가치가 있습니다.NODE_ENV동일한 결과를 얻기 위한 환경 변수.Node 응용프로그램(예: Docker)을 컨테이너화하는 경우 특히 유용합니다.

NODE_ENV=production npm install

, 위코드개를제발모설외종다치을니합속성든한자는의▁will)를 제외한 합니다.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 설치를 실행하는 경우 devDependency가 최상위 수준으로 설치되지 않습니다.
    2. 수명 주기 스크립트에 대해 NODE_ENV="production"을 설정합니다.

행복한 컨테이너화 =)

npm install --production --no-optional

에서 dep만 설치됩니다.dependencies그리고 무시할 것입니다.optionalDependencies그리고.devDependencies

도커 노드에서 current-slim(npm 7.0.9 실행) 문제가 발생했습니다.npm install무시하는 것처럼 보였습니다.--production,--only=prod그리고.--only=production두 가지 해결 방법을 찾았습니다.

  1. 대신 ci를 사용합니다(RUN npm ci --only=production) 최신 package-lock.json이 필요합니다.
  2. 전에npm install패키지를 잔인하게 편집합니다.json with:

RUN node -e 'const fs = require("fs"); const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8")); delete pkg.devDependencies; fs.writeFileSync("./package.json", JSON.stringify(pkg), "utf-8");'

작업 패키지를 편집하지 않습니다.json, 도커 컨테이너에 복사된 것만.물론, 이것이 필요하지는 않지만, 만약 그렇다면 (나에게 그랬던 것처럼), 당신의 해킹이 있습니다.

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

노드 추가 기능이 포함된 패키지에 대해 개발 종속성을 설치하려고 하면 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 패키지(차이, 모카 등)를 추가하는 것과 같습니다.개발에 사용되고 생산에는 사용되지 않습니다.

npm install --production는 프로덕션에 필요한 노드 모듈을 설치하는 올바른 방법입니다.하십시오.

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

반응형