프로그래밍 언어/HTML,CSS,JS

“npm install”이 package-lock.json을 다시 작성하는 이유

Rateye 2021. 8. 20. 10:35
728x90
반응형
질문 : “npm install”이 package-lock.json을 다시 작성하는 이유는 무엇입니까?

최근에 npm @ 5로 업그레이드했습니다. 이제 package.json의 모든 항목이 포함 된 package-lock.json 파일이 있습니다. npm install 을 실행할 때 내 node_modules 디렉토리에 무엇을 설치해야하는지 결정하기 위해 잠금 파일에서 종속성 버전을 가져올 것으로 예상합니다. 이상한 점은 실제로 내 package-lock.json 파일을 수정하고 다시 작성한다는 것입니다.

예를 들어, 잠금 파일에는 버전 2.1.6으로 지정된 typescript가 있습니다. 그런 다음 npm install 명령 후 버전이 2.4.1 로 변경되었습니다. 그것은 잠금 파일의 모든 목적을 무너 뜨리는 것 같습니다.

내가 무엇을 놓치고 있습니까? npm이 실제로 내 잠금 파일을 존중하도록하려면 어떻게합니까?

답변

업데이트 3 : 다른 답변에서도 지적했듯이 npm 5.7.0에는 CI 컨텍스트에서 빠르고 재현 가능한 빌드를 달성하는 추가 방법으로 npm ci 자세한 내용은 설명서npm 블로그 를 참조하십시오.

업데이트 2 : 문서를 업데이트하고 명확히하는 문제는 GitHub 문제 # 18103 입니다.

업데이트 1 : 아래에 설명 된 동작이 npm 5.4.2에서 수정되었습니다. 현재 의도 된 동작은 GitHub 문제 # 17979에 설명되어 있습니다.

원래 답변 : package-lock.json 의 동작은 문제 # 16866 에서 논의 된대로 npm 5.1.0 에서 변경되었습니다. 관찰 한 동작은 버전 5.1.0부터 npm에서 의도 한 것 같습니다.

것을 그 말 package.json 대체 할 수 있습니다 package-lock.json 최신 버전의 종속성에 대한 발견 될 때마다 package.json . 종속성을 효과적으로 고정하려면 이제 접두사없이 버전을 지정해야합니다. 예를 들어 ~1.2.0 또는 ^1.2.0 대신 1.2.0 으로 작성해야합니다. package.jsonpackage-lock.json 의 조합은 재현 가능한 빌드를 생성합니다. 명확하게 package-lock.json 만으로는 더 이상 루트 수준 종속성을 잠그지 않습니다!

이 디자인 결정이 좋은지 여부는 논쟁의 여지가 있지만 GitHub에 대한이 혼란으로 인한 논의가 진행 입니다. (내 눈에는 의심스러운 결정입니다. 적어도 이름 lock 은 더 이상 유효하지 않습니다.)

추가 참고 사항 : npmjs.org 대신 GitHub에서 직접 패키지를 가져올 때와 같이 변경 불가능한 패키지를 지원하지 않는 레지스트리에 대한 제한도 있습니다. 자세한 설명은이 패키지 잠금 문서를 참조하십시오.

출처 : https://stackoverflow.com/questions/45022048/why-does-npm-install-rewrite-package-lock-json
728x90
반응형