В чем разница между yarn.lock и термоусадочной пленкой npm?
Недавно я попытался установить свои пакеты Node с помощью Yarn. Это прекрасно работает, и это намного быстрее, чем NPM. Пряжа автоматически генерирует yarn.lock
, У нас уже есть термоусадочная пленка NPM (npm-shrinkwrap.json
).
Есть ли разница между ними? Есть ли yarn.lock
имеет какое-либо преимущество перед npm-shrinkwrap.json?
2 ответа
yarn.lock
файл очень похож на файлы блокировки других менеджеров пакетов, особенно менеджер пакетов Cargo Rust, который имеет Cargo.lock
, Идея этих файлов блокировки состоит в том, чтобы представлять согласованный набор пакетов, которые всегда должны работать.
npm
хранит диапазоны зависимостей в package.json
файл, что означает, что когда кто-то устанавливает ваш пакет, он может получить другой набор зависимостей, поскольку вы можете запускать устаревшие пакеты (хотя они все еще удовлетворяют указанному вами диапазону зависимостей). Взять, к примеру, того, кто указал зависимость "foo": "^1.0.0"
, Возможно, они фактически установили foo v1.0.1, потому что это был последний раз, когда они запускались npm install
, но позже кто-то устанавливает ваш пакет и получает зависимость foo v1.1.0. Это может что-то неожиданно сломать, чего можно избежать, если у вас есть yarn.lock
файл, который гарантирует согласованное разрешение пакета.
Что касается сравнения с npm shrinkwrap
Документация объясняет это очень четко:
Он похож на npm-shrinkwrap.json, но не с потерями и создает воспроизводимые результаты.
Документация также советует совершать yarn.lock
в ваши репозитории, если вы этого еще не сделали, так что вы можете воспользоваться преимуществами последовательного и воспроизводимого разрешения пакетов. Этот вопрос также объясняет, почему вы должны это сделать.
Поведение с потерями npm shrinkwrap
происходит из-за недетерминированных алгоритмов, используемых npm
сам; как указано в комментариях к другому ответу, npm shrinkwrap
> npm install
> npm shrinkwrap
не гарантируется, что он выдаст тот же результат, что и однократное сжатие, тогда как Yarn явно использует "алгоритм установки, который является детерминированным и надежным".
Есть ли разница между ними
Пряжа следует более детерминированному алгоритму, по сравнению с npm shrinkwrap
, Если вы используете пряжу, продолжение использования термоусадочной пленки было бы нелогичным
Вы можете найти это в документации дляyarn.lock
:
Он похож на npm-shrinkwrap.json, но не с потерями и создает воспроизводимые результаты.
Однако остается вопрос, готова ли пряжа к производству. В репозитории GitHub по-прежнему открыто множество явных ошибок, поэтому я бы подождал около месяца.