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