yarn.lock 및 package-lock.json 파일을 커밋해야합니까?


답변:


148

일반적으로 종속성 잠금 파일을 항상 커밋

다른 곳에서 다룬 것처럼 , 많은 패키지 관리 시스템 (예 : composerbundler )에서 지원하는 종속성 잠금 파일 은 end-of-chain 프로젝트의 코드베이스에 커밋되어 해당 프로젝트를 실행하려는 각 개인이 수행 할 수 있도록해야합니다. 그래서 정확히 테스트 된 종속성 세트로.

잠금 파일이 다른 프로젝트에 포함되도록 의도 된 패키지에 항상 커밋되어야하는지 여부는 명확하지 않습니다 (더 느슨한 종속성이 바람직한 경우). 그러나 두 원사 및 (@Cyrille 적용으로) NPM은 지능적으로 무시 yarn.lock하고 package-lock.json, 필요한 경우 항상이 파일 잠금을 저지하는 것이 안전하고, 각각.

당신은해야한다 그래서 항상 중 적어도 하나를 커밋 yarn.lock또는package-lock.json 당신이 사용하고있는 패키지 관리자에 따라 달라집니다.

yarn.lock과 package-lock.json을 모두 커밋해야합니까?

현재 우리는 설치 모두 두 개의 서로 다른 패키지 관리 시스템이 종속의 동일한 세트 에서을 package.json하지만, 생성하는 두 개의 서로 다른 파일 잠금에서 읽을 수 있습니다. NPM 5는 생성 package-lock.json하는 반면 Yarn은 생성 yarn.lock합니다.

커밋 package-lock.json하면 NPM 5로 종속성을 설치하는 사람들을 지원하는 것입니다. 커밋 yarn.lock하면 Yarn으로 종속성을 설치하는 사람들을 지원하는 것입니다.

커밋 선택 여부 yarn.lockpackage-lock.json또는 둘 모두는 원사 또는 NPM 5 또는 둘 모두를 사용하는 프로젝트에서 개발하는 여부에 따라 달라집니다. 프로젝트가 오픈 소스 인 경우, 할 수있는 대부분의 사회 친화적 인 것은 아마 모두를 저지하고 보장하기 위해 자동화 된 프로세스가하는 것 yarn.lockpackage-lock.json항상 동기화를 유지합니다.

업데이트 : Yarn은 이제 파일에서 파일을 생성 하는 import명령 을 도입 했습니다 . 이것은 두 파일을 동기화 상태로 유지하는 데 유용 할 수 있습니다. (@weakish에게 감사드립니다)yarn.lockpackage-lock.json


이 문제는 Yarn 프로젝트에서 자세히 논의되었습니다.

둘 다 이제 닫혔습니다.


1
좋은 대답입니다. 그러나 당신의 요점과 관련하여 : "가장 안전한 방법은 종속성이 변경 될 때마다 둘 다 생성하고 커밋하는 것입니다." 왜 이것이 "가장 안전한"일인지 모르겠습니다. 앞서 언급했듯이 "두 파일이 동기화되지 않을 수 있습니다." @crimbo의 대답은이 문제를 더 자세히 설명합니다.
TachyonVortex

프로젝트를 실행하는 모든 사람을 제어 할 수 있는지 여부에 차이가있을 수 있다고 생각합니다. 팀을 소유하고 있다면 Yarn에서 표준화하고 yarn.lock을 사용하십시오. 그러나 그것이 오픈 소스 프로젝트라면 (우리의 모든 프로젝트와 마찬가지로) 사람들은 내부적으로 Yarn을 사용하더라도 프로젝트에 NPM을 사용할 수 있습니다. 따라서 가장 안전한 방법은 자동 시스템을 사용하여 yarn.lock 및 package-lock.json이 동기화 상태를 유지하도록하는 것입니다. 또한 Yarn에 압력을 가하여 package-lock.json으로 전환하십시오.
Robin Winslow


18

종속성 트리 잠금 파일 1 개를 커밋해야하지만 둘 다 커밋해서는 안됩니다. 이것은 또한 프로젝트를 빌드 + 개발하기 위해 yarn 또는 npm (둘다는 아님)에 대한 표준화가 필요합니다.

원사를 표준화하는 경우 yarn.lock이 수행되어야하는 이유에 대한 원사 기사가 있습니다.

yarn.lock파일과 파일을 모두 커밋하면 두 package-lock.json파일이 서로 다른 종속성 트리를 제공 할 수있는 많은 방법이 있으며 (얀과 npm의 트리 확인 알고리즘이 동일하더라도) 정확하게 제공하는지 확인하는 것은 사소한 일이 아닙니다. 같은 대답. 사소하지 않기 때문에 동일한 종속성 트리가 두 파일에서 유지 될 가능성이 낮으며 빌드가 yarn 또는 npm을 사용하여 수행되었는지 여부에 따라 다른 동작을 원하지 않습니다.

yarn이 사용 yarn.lock에서 package-lock.json( issue here ) 로 전환 하면 커밋 할 잠금 파일을 쉽게 선택할 수 있으며 더 이상 yarn과 npm에 대해 걱정할 필요가 없습니다. 이 블로그 게시물을 기반으로 , 이것은 우리가 곧 기대하지해야 변화 (블로그 게시물도 사이의 차이점에 대해 설명 yarn.lockpackage-lock.json.


11

나는 같은 질문에 대해 생각하고 있었다. 내 생각은 다음과 같습니다.

NPM 패키지 - lock.json 문서는 다음을 말한다 :

npm이 node_modules 트리 또는 package.json을 수정하는 모든 작업에 대해 package-lock.json이 자동으로 생성됩니다. 생성 된 정확한 트리를 설명하므로 후속 설치에서 중간 종속성 업데이트에 관계없이 동일한 트리를 생성 할 수 있습니다.

이것은 "내 컴퓨터에서 작동"효과를 방지하기 때문에 훌륭합니다.

이 파일이 없으면, 당신이 경우 npm install --save A, NPM은 추가 할 것이다 "A": "^1.2.3"당신에게 package.json. 다른 사람이 실행되면 npm install프로젝트에, 버전 가능성이 1.2.4의이 A출시되었습니다. 에 지정된 semver 범위를 만족하는 최신 버전이므로이 버전을 package.json설치합니다. 하지만이 버전에 새로운 버그가 있다면 어떨까요? 이 사람은 버그없이 이전 버전을 가지고 있기 때문에 재현 할 수없는 문제를 안고있을 것입니다.

모든 사람이 모든 패키지의 동일한 버전을 가지므로 파일 은 node_modules디렉토리 상태를 수정 package-lock.json하여이 문제를 방지합니다.

그러나 npm 모듈을 작성하고 게시하는 경우에는 어떨까요? 문서는 다음과 같이 말합니다.

package-lock.json에 대한 한 가지 중요한 세부 사항은 게시 할 수 없으며 최상위 패키지가 아닌 다른 위치에서 발견되면 무시된다는 것입니다.

따라서 커밋하더라도 사용자가 모듈을 설치할 때 package-lock.json파일을 가져 오지 않고 파일 만 가져옵니다 package.json. 따라서 npm은 모든 종속성의 semver 범위를 충족하는 최신 버전을 설치합니다. 즉, 모듈 작성을 시작할 때 설치 한 것이 아니라 종속성의 이러한 버전으로 모듈을 항상 테스트하려고합니다. 따라서 그 경우 package-lock.json에는 분명히 쓸모가 없습니다. 더 많은 것은 성 가실 수 있습니다.


7

내 경험 법칙은 다음과 같습니다. 애플리케이션에서 작업하는 경우 잠금 파일을 커밋합니다. 라이브러리를 유지하는 경우 무시 목록에 추가하십시오. 어느 쪽이든 .NET에서 정확한 semver 범위를 사용해야합니다 package.json. Yehuda Katz ( cached )는 커밋 할 때 Gemfile.lock(Ruby의 잠금 파일)와하지 않을 때에 대한 훌륭한 설명을 썼습니다 . 적어도 tl; dr 섹션을 읽으십시오.


링크가 끊어졌습니다.
Juha Syrjälä

@ JuhaSyrjälä 감사합니다. 기사에 두 번째 링크를 추가했습니다.
ravinggenius

npm 또는 yarn에 대한 무시 목록은 어디에 있습니까?
neves

"목록 무시"는 프로젝트의 소스 저장소 (git, mercurial, Subversion)에 따라 다릅니다. git의 경우 파일은라고 .gitignore하며 일반적으로 프로젝트의 루트에 있습니다.
ravinggenius

4

당신이 맞아요! npm와 둘 다 yarn사용하면 문제가 발생할 수 있습니다. 한 번 봐 가지고 이 기사를 .

현재, 우리는있는 거 계획을 모두 사용하는 사용자에게 몇 가지 경고를 추가 할 수 yarnnpm같은 저장소에 패키지를 설치합니다.

package-lock.json향후 혼동 및 가능한 일관성 문제를 방지하기 위해 yarn을 사용하기로 결정한 경우 파일 을 삭제하는 것이 좋습니다 .

패키지 관리자 npm와 둘 다 원하지 않을 수도 있습니다 yarn.


2

이러한 파일은 도구에 의해 관리되므로 yarn을 사용하면 효과적으로 업데이트 package-lock.json된다고 가정합니다. 두 파일을 모두 커밋 하면 제대로 작동한다고 가정합니다.

난 당신의 사용자에 대한 가장 중요한 생각 package-lock.json이 하나가 그래서 (내가 예를 들어, 원사를 사용하지 않는) 최선을 다하고 될 수 있습니다.

yarn.lock경우 혼자 작업하는지 팀으로 작업하는지에 따라 다릅니다. 솔로라면 커밋 할 필요가 없다고 생각합니다. 팀에서 일할 계획이라면 적어도 실이 지원할 때까지 커밋해야 할 것입니다 🙂

나는 원사 팀이 결국 사용을 중단 yarn.lock하고 package-json.lock대신 사용할 것이라고 생각합니다.


1
yarn.lock 사용을 멈추지 않았습니다.
jayarjo

0

아니요, 두 잠금 파일을 동시에 사용하면 특히 팀에서 공동 작업 할 때 종속성 트리에서 불일치가 발생하는 경우가 가장 많습니다. 하나의 잠금 또는 다른 잠금을 무시하는 것은 간단한 해결책입니다. 팀이이 변경 사항을 이해하고 동의하는지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.