원 사는 yarn.lock
을 수행 한 후 파일을 만듭니다 yarn install
.
이것이 저장소에 커밋되거나 무시되어야합니까? 무엇입니까?
답변
예, 체크인해야합니다. npm에서 마이그레이션을 참조하십시오.
Yarn은 패키지의 루트 디렉토리 내에 yarn.lock 파일을 생성합니다. 이 파일을 읽거나 이해할 필요가 없습니다. 소스 제어로 확인하십시오.
답변
프로젝트가 무엇인지에 따라 다릅니다.
- 프로젝트가 응용 프로그램입니까? 그런 다음 예
- 프로젝트가 도서관입니까? 그렇다면 : 아니오
이에 대한 자세한 설명 은 Yarn 제작자 중 하나 인 GitHub 문제 에서 확인할 수 있습니다 . 말한다 :
package.json은 원래 작성자가 원하는 의도 된 버전을 설명하고 yarn.lock은 주어진 응용 프로그램에 대해 마지막으로 알려진 올바른 구성을 설명합니다.
yarn.lock
최상위 프로젝트 의 -file 만 사용됩니다. 따라서 하나의 프로젝트를 독립형으로 사용하고 다른 프로젝트에 설치하지 않는 한 yarn.lock
-file 을 커밋하는 데는 아무 소용이 없습니다. 대신 package.json
프로젝트가 기대하는 버전의 종속성을 전달하는 것은 항상 -file에 달려 있습니다.
답변
나는 이것들이 하나의 두 가지 질문이라는 것을 알았습니다. 둘 다 대답하겠습니다.
파일을 리포지토리에 커밋해야합니까?
예. ckuijjer의 답변 에서 언급했듯이 마이그레이션 안내서 에서이 파일을 리포지토리 에 포함 시키는 것이 좋습니다 . 왜해야하는지 이해하려면 계속 읽으십시오 .
무엇입니까 yarn.lock
?
각 패키지의 체크섬과 함께 프로젝트의 정확한 종속성 버전을 저장하는 파일입니다. 이것은 의존성에 일관성을 제공하는 원사의 방법입니다.
이 파일이 필요한 이유를 이해하려면 먼저 원래 NPM의 문제가 무엇인지 이해해야합니다 package.json
. 패키지를 설치할 때 NPM은 특정 개정 (semver) 대신 종속성의 허용 된 개정 범위를 저장합니다. NPM은 지정된 범위 내에서 최신 버전의 종속성 종속성을 가져 오려고 시도합니다 (즉, 최신 패치 업데이트가 아님). 이 방법에는 두 가지 문제가 있습니다.
-
종속성 작성자는 실제로 프로젝트에 영향을 미치는 주요 변경 사항을 도입하면서 패치 버전 업데이트를 릴리스 할 수 있습니다.
-
npm install
다른 시간에 실행중인 두 개발자 는 서로 다른 종속성 집합을 얻을 수 있습니다. 정확히 동일한 두 환경에서 버그를 재현 할 수없는 원인이 될 수 있습니다. 예를 들어 CI 서버의 빌드 안정성 문제가 발생할 수 있습니다.
반면에 원 사는 최대 예측 가능성의 경로를 따릅니다. 정확한 종속성 버전 yarn.lock
을 저장하기 위해 파일을 작성 합니다 . 해당 파일을 원사로 사용하면에서 버전 을 확인하는 대신 저장된 버전을 사용 합니다. 이 전략은 위에서 설명한 문제가 발생하지 않도록합니다.yarn.lock
package.json
yarn.lock
명령 npm-shrinkwrap.json
으로 만들 수있는 것과 비슷합니다 npm shrinkwrap
. 이 두 파일의 차이점을 설명하는 이 답변을 확인하십시오 .
답변
Yarn 버전 자체 yarn.lock 파일이 있기 때문에 예라고 생각합니다.
https://github.com/yarnpkg/yarn
결정 론적 패키지 종속성 분석에 사용됩니다.
답변
당신은해야합니다 :
- 저장소에 추가하고 커밋하십시오.
- 로컬 및 CI 빌드 서버 모두에서 기본값이
yarn install --frozen-lockfile
아닌 NOTyarn install
을 사용하십시오 .
(나는 정지 잠금 파일을 기본 동작으로 만들기 위해 실의 이슈 트래커에서 티켓을 열었습니다 . # 4147 참조 ).
package.json 및 yarn.lock 파일을 동기화 할 수 없으므로 파일에 frozen-lockfile
플래그를 설정하지 마십시오 .yarnrc
. github 의 관련 원사 문제를 참조하십시오
yarn install
예상치 못한 원사를 변경시킬 수 있습니다 . yarn install
yarn.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가 말했듯 이
실을 잠그지 마십시오. “내 시스템에서 작동”버그를 피하기 위해 결정 론적 종속성 해결을 보장해야합니다.
