Должен ли я передать файл yarn.lock и для чего он нужен?

Пряжа создает файл yarn.lock после выполнения yarn install.

Должно ли это быть передано в репозиторий или проигнорировано? Для чего это?

Ответы

Ответ 1

Да, вы должны проверить его, см. Миграция с npm

Пряжа создаст файл narn.lock в корневом каталоге вашего пакета. Вам не нужно читать или понимать этот файл - просто проверьте его на исходный элемент управления.

Ответ 2

В зависимости от вашего проекта:

  • Является ли ваш проект приложением? Затем: Да
  • Является ли ваш проект библиотекой? Если да: Нет

Более подробное описание этого можно найти в этой проблеме GitHub, где один из создателей пряжи, например. говорит:

Пакет .json описывает предполагаемые версии, желаемые оригинальным автором, в то время как yarn.lock описывает последнюю известную конфигурацию для данного приложения.

Будет использоваться только yarn.lock файл проекта верхнего уровня. Поэтому, если один проект не будет использоваться автономно и не будет установлен в другой проект, тогда нет смысла использовать какой-либо yarn.lock файл - вместо этого он всегда будет до package.json файла, чтобы передать какие версии зависимостей проект ожидает тогда.

Ответ 3

Я вижу, что это два отдельных вопроса в одном. Позвольте мне ответить на оба вопроса.

Вы должны зафиксировать файл в репо?

Да. Как упоминалось в ответе ckuijjer, в Руководстве по миграции рекомендуется включить этот файл в репозиторий. Читайте дальше, чтобы понять, зачем вам это нужно.

Что такое yarn.lock?

Это файл, в котором хранятся точные версии зависимостей для вашего проекта вместе с контрольными суммами для каждого пакета. Это способ обеспечения согласованности для ваших зависимостей.

Чтобы понять, зачем нужен этот файл, сначала нужно понять, в чем была проблема оригинального NPM package.json. Когда вы устанавливаете пакет, NPM будет хранить диапазон разрешенных ревизий зависимости вместо конкретной ревизии (semver). NPM будет пытаться получить обновление самой последней версии зависимости в указанном диапазоне (то есть обновления исправлений без прерываний). У этого подхода есть две проблемы.

  1. Авторы зависимостей могут выпускать обновления версий исправлений, хотя на самом деле вносят существенные изменения, которые повлияют на ваш проект.

  2. Два разработчика, использующие npm install в разное время, могут получить различный набор зависимостей. Что может привести к невозможности воспроизведения ошибки в двух абсолютно одинаковых средах. Это может вызвать проблемы стабильности сборки для серверов CI, например.

Пряжа, с другой стороны, идет по пути максимальной предсказуемости. Создает файл yarn.lock для сохранения точных версий зависимостей. При наличии этого файла пряжа будет использовать версии, хранящиеся в yarn.lock, вместо разрешения версий из package.json. Эта стратегия гарантирует, что ни одна из проблем, описанных выше, не произойдет.

yarn.lock похож на npm-shrinkwrap.json, который может быть создан командой npm shrinkwrap. Проверьте этот ответ, объясняя различия между этими двумя файлами.

Ответ 4

Я бы предположил, да, поскольку версия Yarn имеет собственный файл yarn.lock: https://github.com/yarnpkg/yarn

Он используется для детерминированного разрешения зависимости пакета.

Ответ 5

Из моего опыта я бы сказал, что да, мы должны зафиксировать файл yarn.lock. Это гарантирует, что, когда другие люди будут использовать ваш проект, они получат те же зависимости, что и ваш проект.

Из документа

Когда вы запускаете ни пряжу, ни пряжу, Yarn будет генерировать файл yarn.lock в корневом каталоге вашего пакета. Вам не нужно читать или понимать этот файл - просто проверьте его на исходный контроль. Когда другие люди начинают использовать пряжу вместо npm, файл yarn.lock гарантирует, что они получат точно те же зависимости, что и у вас.

Можно утверждать, что мы можем достичь этого, заменив ^ на --. Да, мы можем, но в целом мы видели, что большинство пакетов npm поставляется с нотой ^, и мы должны вручную менять нотацию для обеспечения статической зависимости. Но если вы используете yarn.lock, она будет программно обеспечивать вашу правильная версия.

Также как Эрик Эллиот сказал здесь

Не .gitignore пряжа. Он должен обеспечить детерминированное разрешение зависимостей, чтобы избежать ошибок "работает на моей машине".

Ответ 6

Да! yarn.lock должен быть зарегистрирован, чтобы любой разработчик, устанавливающий зависимости, получил точно такой же вывод! Например, с npm [который был доступен в октябре 2016 года], вы можете иметь локально установленную версию patch (скажем, 1.2.0), в то время как новый разработчик, работающий с новой версией install, может получить другую версию. версия (1.2.1).

Ответ 7

Да, Ты должен это совершить. Подробнее о файле yarn.lock см. официальные документы здесь.

Ответ 8

Вы должны:

  1. добавьте его в репозиторий и зафиксируйте
  2. используйте yarn install --frozen-lockfile и NOT yarn install по умолчанию как локально, так и на серверах сборки CI

yarn install может неожиданно изменить ваш yarn.lock, делая заявления о повторяющихся сборках недействительными. Вы должны использовать yarn install только для инициализации yarn.lock и для его обновления.

Кроме того, особенно в больших командах может возникнуть много шума из-за изменений в замке пряжи только потому, что разработчик настраивал свой локальный проект.

Для получения дополнительной информации прочитайте мой ответ о npm package-lock.json, поскольку это применимо и здесь.