Когда использовать пряжу вместо NPM? Какие отличия?

107

В чем разница между Yarn и NPM? На момент написания этого вопроса я могу найти только некоторые статьи в Интернете показывая то , что Пряжа из будут сброшены командой НПМ , как это .

Обладают ли они одинаковыми функциями (я знаю, что Yarn выполняет локальное кэширование и похоже, что вам нужно загрузить пакет только один раз), но есть ли какие-либо преимущества при переходе с NPM на Yarn?

Аша
источник
12
Это неплохой вопрос, и он не заслуживает отрицательной оценки. Тем не менее, его нужно немного прояснить, чтобы сделать его действительно хорошим вопросом.
jedd.ahyoung
Быстрый Google поворачивает вверх это . Я считаю, что это, вероятно, слишком широко / неконструктивно для StackOverflow и в любом случае можно было бы провести немного больше исследований.
Aurora0001,
1
@ Aurora0001 когда я искал, я увидел шпаргалку, но это не ответ на мой вопрос! Я хочу знать различия между ними, а не различия между командами. Пожалуйста, прочтите сначала мой вопрос
Аша
4
@Asha Вы должны отредактировать свой вопрос, чтобы иметь больше деталей и показать то, что вы уже исследовали. Какие различия вы хотите найти? Вы пытаетесь узнать, как реализованы библиотеки? Вы пытаетесь выяснить, чем они отличаются в подходах к проблеме? Если вы уточните свой вопрос, это может быть хорошо, в зависимости от того, что вы спрашиваете. (В зависимости от того, о чем вы спрашиваете, информация может быть уже доступна в Google.)
jedd.ahyoung
3
смешные люди говорят вам погуглить; Я обнаружил, что ваш вопрос собирается в Google ... люди в stackoverflow, как правило, чрезмерно исключают вещи, как если бы это сделало их более важными, я думаю.
jairhumberto

Ответы:

72

ОБНОВЛЕНИЕ: март 2018 г. (немного поздно ...)

Начиная с версии 5, npm

  • генерирует package-lock.jsonфайл блокировки, который фиксирует все ваше дерево зависимостей почти так же, как это делает пряжа (или любой другой) механизм блокировки,
  • Инструмент изготовлен
  • --save теперь подразумевается для npm i
  • Лучшее использование сети и кеша

НПМ 5.7.0 дополнительно ввел в npm ciкоманду для более быстрой установки зависимостей в среде непрерывной интеграции лишь установкой пакетов найти в package-lock.json(сообщение об ошибке , если package-lock.jsonи package.jsonне синхронизированы).

Лично я до сих пор пользуюсь npm.


Оригинал

Я не хочу цитировать прямо из документов, но они отлично объясняют почему, достаточно кратко, чтобы я не видел, как дальше резюмировать идеи.

Во многом:

  1. Вы всегда знаете, что получаете одно и то же на каждой машине разработки.

  2. Параллелирует операции, которых npmнет, и

  3. Это позволяет более эффективно использовать сеть.

  4. Он также может более эффективно использовать другие системные ресурсы (например, ОЗУ) .

Каков производственный опыт людей с этим? Кто знает, для широкой публики это младенец.

TL; DR от Иегуды Каца :

С самого начала файл блокировки Yarn гарантирует, что многократное выполнение yarn в одном и том же репозитории приводит к одним и тем же пакетам.

Во-вторых, Yarn пытается добиться хорошей производительности с холодным кешем, но особенно с теплым.

Наконец, Yarn делает безопасность своей основной ценностью.

Хорошая запись в блоге

« Шпаргалка NPM vs Yarn », автор: Гант Лаборде

Чуть более длинная версия из проекта :

Быстро: Yarn кэширует каждый загружаемый пакет, поэтому он больше никогда не понадобится. Он также распараллеливает операции для максимального использования ресурсов, поэтому время установки сокращается как никогда.

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

Безопасность: Yarn использует контрольные суммы для проверки целостности каждого установленного пакета перед выполнением его кода.

И с README.md :

  • Автономный режим: если вы установили пакет раньше, вы можете установить его снова без подключения к Интернету.
  • Детерминированный: одни и те же зависимости будут установлены одинаково на всех машинах независимо от порядка установки.
  • Производительность сети: Yarn эффективно ставит запросы в очередь и избегает водопадов запросов, чтобы максимально использовать сеть.
  • Несколько реестров: установите любой пакет из npm или Bower и сохраните рабочий процесс пакета одинаковым.
  • Устойчивость сети: сбой одного запроса не приведет к сбою установки. В случае неудачи запросы повторяются.
  • Плоский режим: устранение несоответствий версий зависимостей одной версии, чтобы избежать дублирования.
  • Еще смайлики. 🐈
Msanford
источник
Можете ли вы сказать мне, выполняет ли yarn разрешение зависимостей, как это делает npm v3 ? Я понимаю, что есть --flatопция, которая заставляет реальную плоскую структуру, в которой разрешена установка только одной версии каждой зависимости, но каково поведение по умолчанию в этом случае? Спасибо.
Димитрис Карагианнис
2
Еще смайлики: cat:
Huei Tan
7
Отличный ответ. Интересно, пытались ли они внести свой вклад в npm перед тем, как разветвлять, переименовывать и изменять синтаксис install -g.
Gardner Bickford
очень хороший пост scotch.io/tutorials/…
Акшай Виджай Джайн
3

Что такое ПНФМ?

pnpmиспользует жесткие ссылки и символические ссылки для сохранения одной версии модуля только один раз на диске. Например, при использовании npm или Yarn, если у вас есть 100 проектов, использующих одну и ту же версию lodash, у вас будет 100 копий lodash на диске. С pnpm lodash будет сохранен в одном месте на диске, а жесткая ссылка поместит его в node_modules, где он должен быть установлен.

В результате вы экономите гигабайты места на диске и выполняете установку намного быстрее! Если вы хотите получить более подробную информацию об уникальной структуре node_modules, которую создает pnpm, и о том, почему она отлично работает с экосистемой Node.js, прочтите эту небольшую статью: Почему мы должны использовать pnpm?

Как установить ПНФМ?

npm install -g pnpm

Как установить пакет npm с помощью PNPM?

pnpm install -g typescript // or your desired package

Преимущества PNPMболее YarnиNPM

Вот индикатор выполнения, показывающий время, затраченное на установку NPM, YARNи PNPM(чем короче, тем лучше) введите описание изображения здесь

Нажмите, чтобы пройти полную проверку Benchmark

для получения дополнительной информации посетите https://www.npmjs.com/package/pnpm

ВАСИФ
источник
2

npm :

  1. Менеджер пакетов для JavaScript. npm - это интерфейс командной строки для экосистемы npm. Он протестирован в боевых условиях, удивительно гибок и используется сотнями тысяч разработчиков JavaScript каждый день.
  2. NPM генерирует правильный файл блокировки, тогда как файл блокировки Yarn может быть поврежден в некоторых случаях и должен быть исправлен с помощью инструментов yarn.

Пряжа :

  1. Новый менеджер пакетов для JavaScript. Yarn кэширует каждый загружаемый пакет, поэтому он больше никогда не понадобится. Он также распараллеливает операции для максимального использования ресурсов, поэтому время установки сокращается как никогда.
  2. Yarn не поддерживает вход с паролем (в то время как NPM поддерживает)
Йогеш Вагмаре
источник
1
какие логины?
Rich Stone
1

Когда вы устанавливаете пакет с помощью Yarn (используя yarn add packagename), он помещает пакет на ваш диск . Во время следующей установки этот пакет будет использоваться вместо отправки HTTP-запроса для получения архива из реестра.

Yarn поставляется с удобной программой проверки лицензий , которая может стать действительно мощной, если вам нужно проверить лицензии всех модулей, от которых вы зависите.

Если вы работаете над проприетарным программным обеспечением, не имеет значения, какое из них вы используете. С npm вы можете использовать npm-shrinkwrap.js, а yarn.lock - с Yarn.

Для получения дополнительной информации прочтите следующий блог

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/

Ганеш Калдже
источник
1

Пытаюсь дать лучший обзор новичкам.

npm исторически (2010 г.) был самым популярным менеджером пакетов для JavaScript. Если вы хотите использовать его для управления зависимостями вашего проекта, вы можете ввести следующую команду:

npm init

Это создаст package.jsonфайл. Он содержит все зависимости проекта.

затем

npm install

создаст каталог node_modulesи загрузит в него зависимости (которые вы добавили в package.jsonфайл).

Он также создаст package-lock.jsonфайл. Этот файл используется для описания созданного дерева зависимостей. Это позволяет разработчикам устанавливать точно такие же зависимости. Например, вы можете представить, как разработчик обновляет зависимость до v2, а затем до v3, а другой напрямую обновляется до v3.

npm устанавливает зависимости недетерминированным образом, что означает, что два разработчика могут иметь разные node_modulesкаталоги, что приводит к разному поведению . ** npm пострадал от плохой репутации, например, в феврале 2018 года: в версии 5.7.0 была обнаружена проблема, в которой запуск sudo npm в системах Linux изменял владельца системных файлов, что приводило к необратимому нарушению работы операционной системы.

Чтобы решить эти и другие проблемы, Facebook представила новый менеджер пакетов (2016 г.): Пряжа быстрее, более надежно и более надежно менеджера пакетов для JavaScript.

Вы можете добавить Yarn в проект, набрав:

yarn init

Это создаст package.jsonфайл. Затем установите зависимости с помощью:

yarn install

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

Если вы начали проект с npm , вы можете легко перейти на Yarn . пряжа потребляет столько же package.json. Дополнительные сведения см. В разделе « Переход с npm» .

Тем не менее, NPM был улучшен с каждыми новыми релизами и некоторые проекты все еще использует НПЙ над пряжей .

Матье Жемар
источник
1

Ответ @msanford охватывает почти все, однако мне не хватает части безопасности (известные уязвимости OWASP).

Пряжа

Вы можете проверить их с помощью yarn audit, но не можете исправить. Это все еще нерешенная проблема на GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).

npm

Вы можете использовать npm audit fix, поэтому некоторые из них вы можете исправить самостоятельно.

Оба они, т.е. npm audit&, yarn auditимеют свои собственные инструменты непрерывной интеграции. Это соответственно https://github.com/IBM/audit-ci (используется, отлично работает!) И https://yarnpkg.com/package/audit-ci (не используется).

Даниэль Даниелецки
источник