최근 노드 패키지를 Yarn으로 설치하려고했습니다. 그것은 훌륭하게 작동하며 NPM보다 훨씬 빠릅니다. 원사는 자동으로 yarn.lock
을 생성합니다. 이미 NPM 수축 포장 (npm-shrinkwrap.json
)이 있습니다.yarn.lock과 npm의 shrinkwrap의 차이점은 무엇입니까?
그들 사이에 차이가 있습니까? yarn.lock
은 npm-shrinkwrap.json보다 이점이 있습니까?
최근 노드 패키지를 Yarn으로 설치하려고했습니다. 그것은 훌륭하게 작동하며 NPM보다 훨씬 빠릅니다. 원사는 자동으로 yarn.lock
을 생성합니다. 이미 NPM 수축 포장 (npm-shrinkwrap.json
)이 있습니다.yarn.lock과 npm의 shrinkwrap의 차이점은 무엇입니까?
그들 사이에 차이가 있습니까? yarn.lock
은 npm-shrinkwrap.json보다 이점이 있습니까?
yarn.lock
파일은 다른 패키지 관리자의 잠금 파일, 특히 Cargo.lock
인 Rust 's Cargo 패키지 관리자와 매우 비슷합니다. 이러한 잠금 파일의 아이디어는 항상 작동해야하는 일관된 패키지 세트를 나타내는 것입니다.
npm
은 package.json
파일의 종속성 범위를 저장합니다. 즉, 누군가가 패키지를 설치할 때 지정된 종속성 범위를 여전히 충족 시키지만 오래된 패키지를 실행할 수 있기 때문에 다른 종속성 세트가 발생할 수 있습니다.). 예를 들어 종속성을 지정한 사람 "foo": "^1.0.0"
을 생각해보십시오. 그들은 실질적으로 foo v1.0.1을 설치했을 것입니다. 왜냐하면 그 패키지가 npm install
일 때 최신 이었기 때문에 나중에 패키지를 설치하고 종속성 foo v1.1.0을 얻었습니다. 예기치 않게이 문제가 발생할 수 있습니다. 이는 파일을 사용하면 패키지의 일관된 해상도 인을 보장 할 수 있습니다. npm shrinkwrap
과의 비교에 관해서는
그것은, NPM의 NPM-shrinkwrap.json 비슷, 그러나 그것은 손실이 아니라 그것을 재현 가능한 결과를 생성합니다.
문서는 이미이 일을하지 않는 경우 당신은 일관되고 재현 가능한 패키지 해상도의 혜택을 얻을 수 있도록, 당신의 저장소에 yarn.lock
을 투입 조언한다. This question도 왜해야하는지 더 자세히 설명합니다.
npm shrinkwrap
의 손실 동작은 npm
자체에서 사용되는 비 결정적 알고리즘으로 인해 발생합니다. 다른 답변의 설명에 명시된 바와 같이 npm shrinkwrap
>npm install
>npm shrinkwrap
과 같은 출력을 생성하는 것은 보장되지 않지만 Yarn은 명시 적으로 "an install algorithm that is deterministic and reliable"을 사용합니다.
그들 사이에 어떤 차이가
원사가 npm shrinkwrap
에 비해 더 결정적 알고리즘이 다음입니다. 당신이
당신은이를 찾을 수 직관 될 것 수축 포장을 계속 사용, 원사를 사용하는 경우 documentation for yarn.lock
:
그것은 그러나이 손실되지이고, NPM의 NPM-shrinkwrap.json 비슷 그것을 재현 가능한 결과를 창출합니다.
그러나 원사가 생산 준비 상태인지 여부는 여전히 의문입니다. GitHub 레포에서 열리는 수많은 눈부신 버그가 여전히 있으므로 한 달 정도 기다려야합니다.
수축 포장이 손실이라는 뜻입니까? –
즉,'npm shrinkwrap'>'npm install'>'npm shrinkwrap'은 초기 시간 인 – nikjohn
과는 다른 npm-shrinkwrap 파일을 생성합니다.이 동작의 증거가 있습니까? NPM shrinkwrap docs "npm install을 인수없이 실행하면 기존 shrinklrap을 재생산 만합니다." (ref : https://docs.npmjs.com/cli/shrinkwrap) –
npm-shrinkwrap의 목적은 종속성을 잠그는 것이라고 생각했습니다. 왜 npm-shrinkwrap이 손실이 나는지/이유를 설명해 주시겠습니까? – styfle
[shrinkwrap docs] (https://docs.npmjs.com/cli/shrinkwrap)는 손실이없는 것처럼 들리지만 : "각 종속성의 각 버전을 반복적으로 지정하여 후속 빌드 및 배포시 재귀 적으로 수행하는 것이 바람직합니다. 뜻하지 않게 semver 패턴을 만족시키는 새로운 버전의 종속성을 선택하지 마십시오. " – styfle
패키지 버전을 고정하기 위해 잠금 상자를 추가하는 것보다 간단한 기능을 생각하려고 시도했지만 아무 것도 생각 나지 않았습니다. 내 말은, 패키지의 범위 문자를 제거하여 정확한 번호로 버전을 고정하는 package.json을 간단하게 필터링 할 수 있다는 것입니다. 나는 그를 "얽힌다고"부를 것이다. 고양이 package.json | tangle> package.pinned.json –