Вы можете пропустить чтение статьи и просто перейти к файлу readme
пряжи 2 пользователям: вам это не нужно, прочтите здесь
Через некоторое время использования yarn, когда я перестал бояться обнюхивать файл блокировки, я заметил кое-что подозрительное:
Файл yarn.lock содержит разные версии одного и того же пакета. и многие из них.
Некоторые из них были просто другой версией патча!
И требуемые выражения semver имеют общий диапазон!
Что еще хуже, в некоторых случаях я получал загадочные ошибки TypeScript:
Существуют два разных типа с таким названием, но они не связаны между собой 🧐
И, конечно же, у многих зависимостей были свои собственные рекурсивные node_modules, такие как старый добрый npm 3 days 🤩
Упрощенный пример:
mkdir yarn-dedup-examples cd yarn-dedup-examples yarn init -y yarn add @types/node@^8 # lts/carbon yarn add @types/fs-extra # promise wrapper of node's fs
Это даст нам дубликат @types/node
пакета
yarn add yarn-deduplicate -D; # local. this is best practice! yarn yarn-deduplicate -s fewer yarn.lock; yarn install # Don't forget this step.
И в итоге мы получим:
Какое желаемое состояние.
Чтобы лучше понять, что делает дедупликация,
я рекомендую убедиться, что ваши yarn.lock
и package.json
зафиксированы, запустить инструмент, изучить разницу и зафиксировать изменения!
И, конечно же, прочитать документацию
Использование в CI
Вы можете запустить yarn-deduplicate --list --fail
как часть вашего CI перед установкой yarn, чтобы не допустить добавления дубликатов с течением времени. Не забудьте добавить свой флаг стратегии, если вы не используете значение по умолчанию.
Https://github.com/atlassian/yarn-deduplicate#usage-in-ci
Когда также запускать этот инструмент?
- После установки / удаления зависимостей
- После обновления зависимостей (если вы еще не знаете, yarn upgrade-interactive, попробуйте прямо сейчас!)
- rebases / merges, которые блокируют изменения файла / package.json
Другие решения?
Https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ это может немного помочь. Я лично никогда им не пользовался.
Немного предыстории - пряжа нам «врет»
yarn имеет внутренний dedupe
, который печатает текст, который пытается убедить вас, что вам не нужны dedupe
🤭
yarn dedupe v1.13.0 error The dedupe command isn't necessary. `yarn install` will already dedupe. info Visit https://yarnpkg.com/en/docs/cli/dedupe for documentation about this command.
Но если вы поищете проблемы в github yarn, вы найдете похожую: [функция] улучшить дедупликацию разрешения
Обсуждение очень интересное, практическая часть - это ссылка на инструмент под названием yarn-tools, который является ранней итерацией yarn-deduplicate.
Вы можете вручную сделать то, что делает этот инструмент,
а также изменить файл блокировки таким образом, чтобы обмануть yarn, чтобы делать много вещей (не рекомендуется)
Почему пряжа не выполняет дедупликацию пряжи сама по себе?
Причина этого заключалась в обеспечении стабильных зависимостей с течением времени, позволяя новым установкам использовать последние доступные.
Таким образом, Yarn сохраняет старое разрешение, но предпочитает новейшее при установке новой зависимости. Оглядываясь назад, я думаю, что логичным было бы использовать существующее разрешение, если бы мы стремились к стабильности.
@madbyk, команда yarn v1, из ответов в статье
Стоит отметить, что пряжа 2 имеет встроенную функцию.
Основные выводы:
файлы блокировки важны!
При проверке запросов на вытягивание также проверяйте изменения файлов блокировки!
Файлы блокировки меняются по определенной причине, и вам нужно убедиться, что эти изменения имеют смысл.
если разница огромна - что-то может быть не так.
Спасибо, что прочитали!
Бная