Programming

npm-shrinkwrap.json과 package-lock.json의 차이점은 무엇입니까?

procodes 2020. 7. 2. 08:14
반응형

npm-shrinkwrap.json과 package-lock.json의 차이점은 무엇입니까?


npm @ 5출시package-lock.json 되면 npm-shrinkwrap.json이미 존재 하지 않는 한 이제는 씁니다 .

다음을 통해 전 세계적으로 npm @ 5를 설치했습니다.

npm install npm@5 -g

그리고 지금 npm-shrinkwrap.json다음 중에 a 가 발견 되면 :

npm install

경고가 인쇄됩니다 :

npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!

그래서 내 테이크 아웃은 수축 포장을로 교체해야한다는 것 package-lock.json입니다.

그러나 왜 새로운 형식이 있습니까? 할 수없는 package-lock.json일이 무엇입니까 npm-shrinkwrap.json?


파일의 내용은 정확히 동일하지만 문서 사이트npm 저장소의 문서 파일에 설명되어있는 npm에서 파일을 처리하는 방법에는 몇 가지 차이점 이 있습니다 .

  • package-lock.jsonnpm에 게시되지 않지만 npm-shrinkwrap기본적으로는
  • package-lock.json 최상위 패키지에없는 파일은 무시되지만 종속성에 속하는 shrinkwrap 파일은 존중됩니다
  • npm-shrinkwrap.jsonnpm 버전 2, 3 및 4와 역 호환되지만 package-lock.jsonnpm 5 이상에서만 인식됩니다.

을 실행 하여 기존 package-lock.json로 변환 할 수 있습니다 .npm-shrinkwrap.jsonnpm shrinkwrap

그러므로:

  • 패키지를 npm에 게시하지 않는 경우이 두 파일 중에서 선택해도 아무런 영향이 없습니다. package-lock.json기본값이며 npm 초보자에게는 이름이 명확하기 때문에 사용할 수 있습니다 . 또는 npm-shrinkwrap.json개발 팀의 모든 사람이 npm 5 이상인지 확인하기 어려운 경우 npm 2-4와의 하위 호환성을 위해 사용할 수 있습니다 . (npm 5는 2017 년 5 월 25 일에 출시되었습니다. 대부분의 사람들은 결국 업그레이드 할 예정이므로 이전 버전과의 호환성은 점점 중요 해지고 있습니다.)
  • 당신이하면 된다 NPM에 패키지를 게시, 당신은 사이에서 선택할 수 있습니다 :

    1. 를 사용하여 package-lock.json설치 한 종속성의 버전을 정확하게 기록하지만 패키지를 설치하는 사용자가에 의해 지정된 버전 범위와 호환되는 모든 버전의 종속성을 사용할 수 있도록합니다 package.json.
    2. 사용하여 npm-shrinkwrap.json패키지를 설치하는 모든 사람이 얻을 보장하기 위해 정확하게 모든 종속성의 동일한 버전


    문서에서 (매우 자세히) 설명 된 공식 견해는 라이브러리에 옵션 1을 사용해야한다는 것입니다 (아마도 많은 패키지 종속성이 모두 동일한 보조 종속성의 약간 다른 버전에 의존 할 때 발생하는 패키지 복제 양을 줄이기 위해) 하지만 옵션 2는 전 세계에 설치 될 실행 파일에 적합 할 수 있습니다.


NPM 개발자의 설명 :

이 아이디어는 package-lock.json이 슈 링크 랩 기술에서 가장 최신이자 가장 위대한 것으로, npm-shrinkwrap.json이 정확한 node_modules를 가진 라이브러리에 대해 매우 관심이있는 소중한 소수의 사람들을 위해 예약 된 것입니다. npm @> = 2를 사용하여 CI가 npm 버전을 충돌시키지 않고 특정 트리를 설치하도록 CI를 원하는 사람들을 위해.

새로운 잠금 파일 ( "package-lock.json")은 기본적으로 npm-shrinkwrap과 동일한 형식으로 동일한 코드를 모두 공유합니다 (서로 이름을 바꿀 수 있습니다). 또한 커뮤니티가 이해하는 것입니다. "잠금 파일이 있습니다"는 사람들이 훨씬 빠르게 클릭하는 것 같습니다. 마지막으로, 새 파일이 있다는 것은 부모 게시물에 언급 된 allow-publication과 같은 이상한 일을하지 않고도 수축 포장을 사용하여 상대적으로 위험이 낮은 하위 호환성을 가질 수 있음을 의미했습니다.


아이디어는 기본적으로-저장 및 수축 포장이 발생하지만 수축 포장이 원하지 않는 곳에서 발생하는 잠재적 인 문제를 피하는 것이 었습니다. 그래서 그들은 충돌을 피하기 위해 새로운 파일 이름을 부여했습니다. npm의 누군가가 여기에 더 철저하게 설명했습니다.

https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/

관련 인용문 :

npm은 기본적으로 대부분의 파일을 소스 디렉토리에 게시하며 사람들은 수년간 수축 포장을 게시 해 왔습니다. 우리는 호환성을 깨뜨리고 싶지 않았습니다. 기본적으로 --save 및 shrinkwrap을 사용하면 실수로 레지스트리를 작성하여 레지스트리를 통해 전파 할 위험이 있으며 기본적으로 dep 및 dedupe를 업데이트하는 기능은 null입니다.

그래서 우리는 새로운 이름을 선택했습니다. 그리고 우리는 갑자기 새로운 이름을 선택했습니다. 새로운 잠금 파일은 기본적으로 동일한 코드, 정확히 동일한 형식을 모두 공유합니다.

참고 URL : https://stackoverflow.com/questions/44258235/what-is-the-difference-between-npm-shrinkwrap-json-and-package-lock-json

반응형