- Оригинальный адрес:Yarn vs npm: Everything You Need to Know
- Оригинальный автор:Tim Severien
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:EmilyQiRabbit
- Корректор:jerryOnlyZRJ,TUARAN
Yarn — это новый менеджер пакетов JavaScript, созданный Facebook, Google, Exponent и Tilde. так какОфициальное объявлениеНаписанная, ее цель — решить несколько проблем, с которыми эти команды столкнулись при использовании npm, а именно:
- Инсталляционный пакет недостаточно быстрый и стабильный
- Существует угроза безопасности, поскольку npm позволяет пакетам запускать код при установке.
Но не паникуйте! Он не предназначен для полной замены npm. Yarn — это просто новый клиент CLI, который может получать модули из репозитория npm.
Должны ли все сейчас прыгать в скорый поезд Yarn? Возможно, вы никогда не сталкивались с этими проблемами при использовании npm. В этой статье мы сравним npm и Yarn, чтобы вы могли решить, что лучше для вас.
Yarn и npm: функциональные различия
На первый взгляд Yarn и npm похожи. Но, как мы знаем в глубине, Yarn и npm разные.
файл пряжи.lock
package.json
В файле есть информация, что npm и Yarn отслеживают зависимости проекта, и номер версии не всегда точен. Однако вы можете определить диапазон версий. Таким образом, вы можете выбрать самую высокую и самую низкую версию пакета, но разрешить npm устанавливать последние исправления для исправления некоторых ошибок.
существуетСемантическое управление версиямиВ идеальном мире выпущенные исправления не должны содержать каких-либо существенных модификаций. Но, к сожалению, это не всегда так. Политика npm может привести к тому, что два устройства будут использовать одно и то жеpackage.json
файл, но установлена другая версия пакета, что может привести к сбоям.
Чтобы избежать некорректного сопоставления версий пакетов, точную установленную версию необходимо зафиксировать в файле блокировки. Каждый раз, когда добавляется модуль, Yarn создает (или обновляет)yarn.lock
документ. Таким образом, вы можете гарантировать, чтоpackage.json
При определении дополнительного диапазона версий в файле другие устройства устанавливают тот же пакет.
В команде npmnpm shrinkwrap
Также можно создать файл блокировки иnpm install
чтениеpackage.json
Этот файл блокировки будет прочитан первым, и Yarn будет прочитан первымyarn.lock
аналогичным образом. Самое критичное отличие состоит в том, что Yarn обязательно создаст и обновитyarn.lock
, но npm не создаст его по умолчанию, а будет использовать только как файлnpm-shrinkwrap.json
Обновите его, когда он существует.
Параллельная установка
Всякий раз, когда npm или Yarn необходимо установить пакет, генерируется ряд задач. При использовании npm эти задачи выполняются в порядке пакетов, т. е. только после полной установки одного пакета будет установлен следующий. Yarn выполняет задачи параллельно, повышая производительность.
Напротив, я установил пакет, используя как npm, так и Yarn.express, ни один из них не упаковывает, не блокирует файлы и не кэширует. Эта установка включает в себя в общей сложности 42 пакета.
propertag.cmd.push(function() { proper_display('sitepoint_content_1'); });
- нпм: 9 секунд
- Пряжа: 1,37 секунды
Я не могу поверить своим глазам. Повторение этого шага приводит к аналогичным результатам. Затем я установил пакетgulp, всего загружается 195 зависимостей.
- нпм: 11 секунд
- Пряжа: 7,81 секунды
Похоже, что разница в времени скачивания сильно зависит от количества установленных пакетов. Но в любом случае пряжа быстрее.
более чистый вывод
Вывод npm по умолчанию подробный. Например, при запускеnpm install <package>
, он будет рекурсивно перечислять все установленные пакеты. Пряжа, с другой стороны, очень проста. В нем содержится очень мало важной информации с соответствующими смайликами (если вы не работаете в Windows), в то время как подробную информацию можно получить с помощью других команд.
Пряжа и npm: различия в CLI
Помимо функциональных различий, в Yarn есть несколько разных команд. Некоторые команды npm были удалены, другие изменены, а также добавлено несколько интересных команд.
глобальная пряжа
и npm необходимы для глобальных операций установки-g
или--global
Флаги разные, команду Yarn нужно использоватьglobal
как префикс. Как и в случае с npm, зависимости для конкретного проекта не должны устанавливаться глобально.
global
Префикс применяется только кyarn add
,yarn bin
,yarn ls
а такжеyarn remove
. Кромеyarn add
Эти команды такие же, как команда NPM.
пряжа установить
npm install
Порядок будет следоватьpackage.json
Файл устанавливает зависимости и позволяет добавлять новые пакеты.yarn install
только скачатьyarn.lock
Перечисленные зависимости, загрузите, если файл отсутствуетpackage.json
перечислено.
пряжа добавить [–dev]
а такжеnpm install <package>
аналогичный,yarn add <package>
Позволяет добавлять и устанавливать зависимости. Как буквально означает название команды, она может добавлять зависимости, что означает, что она автоматически добавит ссылку на пакет вpackage.json
файл и npm--save
Тот же знак. Пряжа--dev
Этот флаг сделает пакет зависимым от режима разработки, а npm--save-dev
Тот же знак.
yarn licenses [ls|generate-disclaimer]
На момент написания этой статьи в пряже были доступны эквивалентные команды, недоступные в npm.yarn licenses ls
Возможность перечислить лицензионные соглашения для всех установленных пакетов.yarn licenses generate-disclaimer
Может генерировать заявления об отказе от ответственности для всех лицензионных соглашений, включая все пакеты. В некоторых лицензионных соглашениях указано, что вы должны включить лицензию проекта в свой проект, и эта команда является полезным инструментом в этом случае.
yarn why
Эта команда может проанализировать граф зависимостей и выяснить, почему указанный пакет был установлен в вашем проекте. Возможно, вы явно указали его установку, или, может быть, это одна из зависимостей установленного вами пакета.yarn why
поможет определить причину.
yarn upgrade [package]
Эта команда обновит пакет, чтобы соответствоватьpackage.json
Установите последнюю версию правила и создайте ее заново.yarn.lock
документ. это иnpm update
аналогичный.
Интересно, что когда указан пакет, он обновит пакет до последней версии и обновитpackage.json
метка определена в . Это означает, что эта команда может обновить пакет до нового основного выпуска.
yarn generate-lock-entry
yarn generate-lock-entry
команда сгенерируетyarn.lock
файл, основанный наpackage.json
Параметры зависимости в . с участиемnpm shrinkwrap
очень похожий. Используйте эту команду с осторожностью, так как она создаст файл блокировки, и когда вы пройдетеyarn add
а такжеyarn upgrade
При обновлении зависимостей он будет обновляться автоматически.
Стабильность и надежность
Может ли экспресс Yarn сойти с рельсов? В первый день выпуска он получил многоОбратная связь, но эффективность решения проблем не менее удивительна. Все это означает, что сообщество усердно работает над поиском и решением проблем. Глядя на количество и разнообразие этих проблем, мы знаем, что Yarn более стабилен для большинства пользователей, но для некоторых крайних случаев он может не подойти.
Обратите внимание, что хотя управление пакетами может быть очень важным для вашего проекта, это всего лишь менеджер пакетов. Если что-то действительно пойдет не так, несложно переупаковать пакет и вернуться к использованию npm.
Глядя в будущее
Возможно, вы знаете историю Node.js и io.js. Вкратце, io.js — это форк Node.js, который был создан некоторыми основными участниками из-за разногласий в управлении проектом Node.js. Однако io.js предпочла открытый исходный код. Менее чем через год две команды пришли к соглашению, поэтому io.js снова объединили с Node.js, и разработка io.js остановилась. Является ли этот выбор правильным или неправильным прямо сейчас, в результате в Node.js появилось множество замечательных функций.
Я наблюдаю похожую картину в npm и Yarn. Хотя Yarn не является форком, он устраняет несколько уязвимостей npm. Было бы неплохо, если бы npm извлек уроки из этого и попросил Facebook, Google и других участников Yarn помочь оптимизировать npm? Хотя рано об этом говорить, надеюсь.
В любом случае, будущее Yarn выглядит светлым. Появление этого нового менеджера пакетов взволновало людей в сообществе, и люди постепенно приняли его. К сожалению, у него нет никаких инструкций по планированию, поэтому я не знаю, какие сюрпризы готовит для нас Yarn.
Суммировать
Yarn имеет более высокий рейтинг по сравнению с npm. Мы можем свободно получать файлы блокировки, удивительно быстро устанавливать пакеты, и они автоматически сохраняются вpackage.json
. Есть также несколько недостатков в установке и использовании Yarn. Вы можете сначала попробовать его в проекте, чтобы увидеть, работает ли он для вас. Таким образом, Yarn становится альтернативой npm.
propertag.cmd.push(function() { proper_display('sitepoint_content_2'); });
Я настоятельно рекомендую вам попробовать Yarn в проекте. Если вы с осторожностью относитесь к установке и использованию нового программного обеспечения, тоже дайте ему несколько месяцев. В конце концов, npm проверен в бою, что в мире разработки программного обеспечения определенно того стоит.
Если вы ждете, пока npm установит пакеты, возможно, просто прочитайтеРекомендации по переходу на Yarn ;)
После прочтения статьи Что вы думаете? Вы уже используете Yarn? Хотите попробовать? Или вы думаете, что это приведет только к дальнейшему расколу и без того фрагментированной экосистемы? Пожалуйста, напишите свои мысли в комментариях.
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,товар,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.