[yarnpkg] yarn.lock 파일을 커밋해야하며 무엇을위한 것입니까?

원 사는 yarn.lock을 수행 한 후 파일을 만듭니다 yarn install.

이것이 저장소에 커밋되거나 무시되어야합니까? 무엇입니까?



답변

예, 체크인해야합니다. npm에서 마이그레이션을 참조하십시오.

Yarn은 패키지의 루트 디렉토리 내에 yarn.lock 파일을 생성합니다. 이 파일을 읽거나 이해할 필요가 없습니다. 소스 제어로 확인하십시오.


답변

프로젝트가 무엇인지에 따라 다릅니다.

  1. 프로젝트가 응용 프로그램입니까? 그런 다음
  2. 프로젝트가 도서관입니까? 그렇다면 : 아니오

이에 대한 자세한 설명 은 Yarn 제작자 중 하나 인 GitHub 문제 에서 확인할 수 있습니다 . 말한다 :

package.json은 원래 작성자가 원하는 의도 된 버전을 설명하고 yarn.lock은 주어진 응용 프로그램에 대해 마지막으로 알려진 올바른 구성을 설명합니다.

yarn.lock최상위 프로젝트 의 -file 만 사용됩니다. 따라서 하나의 프로젝트를 독립형으로 사용하고 다른 프로젝트에 설치하지 않는 한 yarn.lock-file 을 커밋하는 데는 아무 소용이 없습니다. 대신 package.json프로젝트가 기대하는 버전의 종속성을 전달하는 것은 항상 -file에 달려 있습니다.


답변

나는 이것들이 하나의 두 가지 질문이라는 것을 알았습니다. 둘 다 대답하겠습니다.

파일을 리포지토리에 커밋해야합니까?

예. ckuijjer의 답변 에서 언급했듯이 마이그레이션 안내서 에서이 파일을 리포지토리 에 포함 시키는 것이 좋습니다 . 왜해야하는지 이해하려면 계속 읽으십시오 .

무엇입니까 yarn.lock?

각 패키지의 체크섬과 함께 프로젝트의 정확한 종속성 버전을 저장하는 파일입니다. 이것은 의존성에 일관성을 제공하는 원사의 방법입니다.

이 파일이 필요한 이유를 이해하려면 먼저 원래 NPM의 문제가 무엇인지 이해해야합니다 package.json. 패키지를 설치할 때 NPM은 특정 개정 (semver) 대신 종속성의 허용 된 개정 범위를 저장합니다. NPM은 지정된 범위 내에서 최신 버전의 종속성 종속성을 가져 오려고 시도합니다 (즉, 최신 패치 업데이트가 아님). 이 방법에는 두 가지 문제가 있습니다.

  1. 종속성 작성자는 실제로 프로젝트에 영향을 미치는 주요 변경 사항을 도입하면서 패치 버전 업데이트를 릴리스 할 수 있습니다.

  2. npm install다른 시간에 실행중인 두 개발자 는 서로 다른 종속성 집합을 얻을 수 있습니다. 정확히 동일한 두 환경에서 버그를 재현 할 수없는 원인이 될 수 있습니다. 예를 들어 CI 서버의 빌드 안정성 문제가 발생할 수 있습니다.

반면에 원 사는 최대 예측 가능성의 경로를 따릅니다. 정확한 종속성 버전 yarn.lock을 저장하기 위해 파일을 작성 합니다 . 해당 파일을 원사로 사용하면에서 버전 을 확인하는 대신 저장된 버전을 사용 합니다. 이 전략은 위에서 설명한 문제가 발생하지 않도록합니다.yarn.lockpackage.json

yarn.lock명령 npm-shrinkwrap.json으로 만들 수있는 것과 비슷합니다 npm shrinkwrap. 이 두 파일의 차이점을 설명하는 이 답변을 확인하십시오 .


답변

Yarn 버전 자체 yarn.lock 파일이 있기 때문에 예라고 생각합니다.
https://github.com/yarnpkg/yarn

결정 론적 패키지 종속성 분석에 사용됩니다.


답변

당신은해야합니다 :

  1. 저장소에 추가하고 커밋하십시오.
  2. 로컬 및 CI 빌드 서버 모두에서 기본값이 yarn install --frozen-lockfile아닌 NOT yarn install을 사용하십시오 .

(나는 정지 잠금 파일을 기본 동작으로 만들기 위해 실의 이슈 트래커에서 티켓을 열었습니다 . # 4147 참조 ).


package.json 및 yarn.lock 파일을 동기화 할 수 없으므로 파일에 frozen-lockfile플래그를 설정하지 마십시오 .yarnrc. github 의 관련 원사 문제를 참조하십시오


yarn install예상치 못한 원사를 변경시킬 수 있습니다 . yarn installyarn.lock을 초기화하고 업데이트 할 때만 사용해야 합니다.

또한, esp. 대규모 팀에서는 개발자가 로컬 프로젝트를 설정했기 때문에 원사 잠금 변경에 많은 소음이 발생할 수 있습니다.

자세한 내용 여기에 적용되는 npm의 package-lock.json에 대한 내 대답을 읽으십시오 .


이것은 최근 에 원사 설치 문서 에서 분명해졌습니다 .

yarn install

로컬 node_modules 폴더의 package.json에 나열된 모든 종속성을 설치하십시오.

yarn.lock다음과 같이 파일이 사용된다 :

  • yarn.lock이 있고 package.json에 나열된 모든 종속성을 충족하기에 충분하면 yarn.lock에 기록 된 정확한 버전이 설치되고 yarn.lock은 변경되지 않습니다. 원 사는 최신 버전을 확인하지 않습니다.
  • yarn.lock이 없거나 package.json에 나열된 모든 종속성을 충족하기에 충분하지 않은 경우 (예 : package.json에 수동으로 종속성을 추가하는 경우) Yarn은 패키지의 제약 조건을 충족하는 최신 버전을 찾습니다. .json. 결과는 yarn.lock에 기록됩니다.

yarn.lock이 업데이트되지 않도록하려면 --frozen-lockfile.


답변

내 경험에 따르면 yarn.lock파일 을 커밋해야한다고 대답 합니다. 다른 사람들이 귀하의 프로젝트를 사용할 때 귀하의 프로젝트가 예상 한 것과 동일한 종속성을 갖게됩니다.

문서에서

yarn 또는 yarn add를 실행하면 Yarn은 패키지의 루트 디렉토리 내에 yarn.lock 파일을 생성합니다. 이 파일을 읽거나 이해할 필요가 없습니다. 소스 제어로 확인하십시오. 다른 사람들이 npm 대신 Yarn을 사용하기 시작하면 yarn.lock 파일을 사용하면 사용자와 정확히 동일한 종속성을 갖게됩니다.

하나는 우리가 대체하여 그것을 달성 할 수있는, 할 수있는 주장 ^과 함께 --. 예, 가능하지만 일반적으로 대부분의 npm패키지에는 ^표기법이 포함되어 있으며 정적 종속성 버전을 보장하기 위해 수동으로 표기법을 변경해야하지만, 사용 yarn.lock하는 경우 프로그래밍 방식으로 올바른 버전을 보장합니다.

또한 Eric Elliott가 말했듯

실을 잠그지 마십시오. “내 시스템에서 작동”버그를 피하기 위해 결정 론적 종속성 해결을 보장해야합니다.


답변

예, 커밋해야합니다. yarn.lock 파일에 대한 자세한 내용은 공식 문서를 참조 하십시오.