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

우리는 모든 결정 론적 pkg 설치에 yarn을 사용하고 있지만 사용자가 npm을 사용하는 것을 막지는 않습니다. 그러나이 두 파일이 모두 문제를 일으킬 것이라고 생각합니다. .gitignore 디렉토리에 하나를 추가해야합니까?



답변

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

다른 곳에서 다룬 것처럼 , 많은 패키지 관리 시스템 (예 : 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 개를 커밋해야하지만 둘 다 커밋해서는 안됩니다. 이것은 또한 프로젝트를 빌드 + 개발하기 위해 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.


답변

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

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에는 분명히 쓸모가 없습니다. 더 많은 것은 성 가실 수 있습니다.


답변

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


답변

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

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

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

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


답변

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

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

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

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


답변

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