답변:
로부터 NPM 워드 프로세서 :
간단히 말해 npm install과 npm ci 사용의 주요 차이점은 다음과 같습니다.
- 프로젝트에는 기존 package-lock.json 또는 npm-shrinkwrap.json이 있어야합니다.
- 패키지 잠금의 종속성이 package.json의 종속성과 일치하지 않으면 npm ci가 패키지 잠금을 업데이트하는 대신 오류와 함께 종료됩니다.
- npm ci는 한 번에 전체 프로젝트 만 설치할 수 있습니다.이 명령으로 개별 종속성을 추가 할 수 없습니다.
- node_modules가 이미 있으면 npm ci가 설치를 시작하기 전에 자동으로 제거됩니다.
- package.json 또는 패키지 잠금에 쓰지 않습니다. 설치는 기본적으로 정지됩니다.
기본적으로,
종속성 목록을 작성하기 위해 npm install
읽고 이러한 종속성의 버전을 설치하는 데 사용합니다. 종속성이 없으면에 의해 추가됩니다 .package.json
package-lock.json
package-lock.json
npm install
npm ci
(이름을 딴 C ontinuous I의 ntegration가)에서 직접 종속성을 설치 package-lock.json
및 사용 package.json
에는 일치하지 않는 버전이 없는지 만 확인하려면. 종속성이 없거나 호환되지 않는 버전이 있으면 오류가 발생합니다. 합니다.
npm install
새 종속성을 추가하고 프로젝트의 종속성을 업데이트하는 데 사용하십시오 . 일반적으로 종속성 목록을 업데이트하는 변경 사항을 가져온 후 개발 중에이를 사용하지만 npm ci
이 경우 에 사용하는 것이 좋습니다 .
npm ci
결정적이고 반복 가능한 빌드가 필요한 경우 사용하십시오 . 예를 들어 지속적인 통합, 자동화 된 작업 등에서 및 대신 종속성을 처음 설치할 때가 npm install
있습니다.
npm install
npm-shrinkwrap.json
및 package-lock.json
(순서대로) 구동됩니다 .node_modules
.package.json
또는에 쓸 수 있습니다 package-lock.json
.
npm i packagename
) 와 함께 사용 package.json
하면 종속성을 추가하거나 업데이트 하기 위해 쓸 수 있습니다 .npm i
) package-lock.json
이 파일에없는 일부 종속성 버전을 잠그기 위해 쓸 수 있습니다.npm ci
package-lock.json
하거나 npm-shrinkwrap.json
존재 해야합니다 .package.json
.node_modules
하고 설치 합니다 .package.json
또는에 쓰지 않습니다 package-lock.json
.상태 npm ci
에서 전체 종속성 트리를 생성 package-lock.json
하거나 npm-shrinkwrap.json
, npm install
내용 업데이트node_modules
다음 알고리즘 (사용 소스 ) :
load the existing node_modules tree from disk clone the tree fetch the package.json and assorted metadata and add it to the clone walk the clone and add any missing dependencies dependencies will be added as close to the top as is possible without breaking any other modules compare the original tree with the cloned tree and make a list of actions to take to convert one to the other execute all of the actions, deepest first kinds of actions are install, update, remove and move
npm install package
모두를 수정할 수 package-lock.json
하고 package.json
있는 동안, npm install
whithout 인수는 수정할 것package-lock.json
연결 한 문서에는 다음과 같은 요약이 있습니다.
간단히 말해 npm install과 npm ci 사용의 주요 차이점은 다음과 같습니다.
- 프로젝트에는 기존 package-lock.json 또는 npm-shrinkwrap.json이 있어야합니다.
- 패키지 잠금의 종속성이 package.json의 종속성과 일치하지 않으면 npm ci가 패키지 잠금을 업데이트하는 대신 오류와 함께 종료됩니다.
- npm ci는 한 번에 전체 프로젝트 만 설치할 수 있습니다.이 명령으로 개별 종속성을 추가 할 수 없습니다.
- node_modules가 이미 있으면 npm ci가 설치를 시작하기 전에 자동으로 제거됩니다.
- package.json 또는 패키지 잠금에 쓰지 않습니다. 설치는 기본적으로 정지됩니다.
명령은 기능면에서 매우 유사하지만 차이점은 사용자 package.json
및 package-lock.json
파일에 지정된 종속성을 설치하는 방법에 있습니다.
npm ci
앱의 모든 종속성을 새로 설치하지만 npm install
시스템에 이미 존재하는 경우 일부 설치를 건너 뛸 수 있습니다. 시스템에 이미 설치된 버전이 설치하려는 버전이 아닌 경우, package.json
즉 설치된 버전이 ' 필수 '버전 과 다른 경우 문제가 발생할 수 있습니다 .
다른 차이점은 파일을 npm ci
건드리지 않는 것 package*.json
입니다. 종속성 버전이 package.json
및 package-lock.json
파일 에서 일치하지 않으면 설치가 중지되고 오류가 표시 됩니다.
당신은 공식 문서에서 더 나은 설명 읽을 수 있습니다 여기를 .
그것은 고산 같은 빛 노드 고정 표시기 이미지는 파이썬의 종속성 인 설치하지 않는 것이 마음에 가진 가치 node-gyp
에 의해 사용되는 npm ci
.
나는 npm ci
일 하기 위해서는 파이썬을 빌드에서 의존성으로 설치해야 한다고 생각합니다 .
자세한 내용은 여기 Docker 및 npm-gyp ERR! 괜찮아
다른 상황에서 사용해야합니다.
npm install
node_modules
디렉토리 를 캐시하려는 경우 개발 및 CI에 유용합니다 . 이것을 언제 사용합니까? 다른 사람이 사용할 수 있도록 패키지를 만드는 경우 ( node_modules
이러한 릴리스 에는 포함되지 않음)이 작업을 수행 할 수 있습니다. 캐싱과 관련하여 런타임 요구 사항의 차이로 인해 다시 설치해야 할 다른 버전의 Node.js
기억 을 지원하려는 경우주의 하십시오 . 한 버전을 고수하려면 최신 버전을 고수하십시오 .node_modules
Node.js
LTS
npm ci
설치가 가능한 한 결정적이어야하므로이 응용 프로그램은 최종 응용 프로그램 (다른 패키지에서 사용하지 않는 최종 제품)을 테스트 및 릴리스 할 때 사용해야합니다. 보다 안정적인 응용 프로그램 ( node_modules
이러한 릴리스에 포함) . 의 LTS
버전을 고수하십시오 Node.js
.
보너스 : 얼마나 복잡한 지에 따라 혼합 할 수 있습니다. 의 기능 분기를 git
캐시 node_modules
하여 팀 생산성을 높이고 병합 요청 및 마스터 분기 npm ci
를 통해 결정적인 결과를 얻을 수 있습니다.
npm install
package.json에 쓸 수 있는지 몰랐습니다 . 여기에 무엇을 쓸 수 있는지 알고 있습니까?