В понедельник мой коллега Джей Джей познакомил меня с новым проектом на основе React. Мои действия, как обычно:
git clone xxx
npm install
npm run dev
В это время JJ принес мне следующий абзац
git clone xxx
yarn
yarn start
"Эй, какого черта пряжа? Это более продвинутая альтернатива npm? Почему она должна заменить npm? Есть ли хорошее место?" В моем сердце возник ряд вопросов. Я тихо спросил Джей-Джея: «Является ли пряжа тем же, что и npm?», «Ага.» Джей-Джей был занят набором текста на клавиатуре, очевидно, что этот вопрос не стоит того, чтобы задавать его дальше. Я также молча записываю в уме ряд вопросов.
Что такое пряжа?
«Yarn — это новый инструмент управления пакетами JS, совместно запущенный Facebook, Google, Exponent и Tilde.официальная документацияКак написано в , Yarn, похоже, компенсировал некоторые недостатки npm. «Это предложение напоминает мне о ямах при использовании npm:
-
npm install
когдаочень медленно. В частности, требуется много времени, чтобы снести новый проект, удалить node_modules, и то же самое при переустановке. - Тот же проект, при установкенеспособность поддерживать постоянство. Из-за особенностей номера версии в файле package.json следующие три номера версии представляют разные значения во время установки.
"5.0.3",
"~5.0.3",
"^5.0.3"
«5.0.3» означает установку указанной версии 5.0.3, «~5.0.3» означает установку последней версии 5.0.X, «^5.0.3» означает установку последней версии 5.X.X. Это хлопотно, часто появляется один и тот же проект, у кого-то все нормально, а у кого-то баги из-за несовместимости установленных версий.
- При установке пакеты загружаются и устанавливаются одновременно, и в какой-то момент посередине пакет выдает ошибку, но npm продолжает скачивать и устанавливать пакет. Поскольку npm выводит все свои журналы на терминал, сообщения об ошибках о поврежденных пакетах теряются в куче предупреждений, напечатанных npm, и вы даже не сможетене заметит ошибки, которая произошла на самом деле.
С этими ямами я начал понимать преимущества Yarn и проблемы, которые он решает.
Преимущества пряжи?
- высокоскоростной. Скорость в основном зависит от следующих двух аспектов:
- Параллельные установки: Независимо от того, выполняет ли npm или Yarn установку пакета, выполняется ряд задач. npm выполняет каждый пакет в соответствии с очередью, то есть он должен дождаться установки текущего пакета, прежде чем продолжить последующую установку. А Yarn выполняет все задачи синхронно, что повышает производительность.
- Автономный режим: если пакет был установлен ранее, он будет получен из кеша при повторной установке с помощью Yarn, а не загружать его из сети, как npm.
- УстановитьЕдиная версия: Чтобы предотвратить переход на другую версию, Yarn имеет файл блокировки, в котором записан номер версии модуля, который точно установлен. Каждый раз, когда добавляется новый модуль, Yarn будет создавать (или обновлять) файл yarn.lock. Это гарантирует, что каждый раз, когда вы извлекаете одни и те же зависимости проекта, используется одна и та же версия модуля. На самом деле, в npm тоже есть способ везде использовать одну и ту же версию пакетов, но разработчикам нужно выполнить команду npm shrinkwrap. Эта команда создаст файл блокировки.При выполнении npm install файл блокировки будет прочитан первым, по той же причине, по которой Yarn читает файл yarn.lock. Разница между npm и Yarn заключается в том, что Yarn генерирует такой файл блокировки по умолчанию, а npm генерирует файл npm-shrinkwrap.json через команду shrinkwrap.Только когда этот файл существует, информация о версии пакетов будет записана и сохранена.
- более краткий вывод: вывод npm довольно подробный. При выполнении npm install командная строка будет постоянно выводить все установленные зависимости. Напротив, Yarn слишком лаконичен: по умолчанию он объединяет эмодзи для интуитивного и непосредственного вывода необходимой информации, а также предоставляет разработчикам некоторые команды для запроса дополнительной информации об установке.
- **Обработка нескольких источников регистрации:** Все зависимые пакеты, независимо от того, сколько раз на них косвенно ссылаются разные библиотеки, будут установлены только из одного зарегистрированного источника при установке этого пакета, будь то npm или bower, чтобы избежать путаницы.
- лучшая семантика: в yarn изменены названия некоторых команд npm, например, yarn add/remove, которые кажутся чище, чем исходная установка/удаление npm.
Сравнение команд Yarn и npm
npm | yarn |
---|---|
npm install | yarn |
npm install react --save | yarn add react |
npm uninstall react --save | yarn remove react |
npm install react --save-dev | yarn add react --dev |
npm update --save | yarn upgrade |
Будущее нпм: нпм 5.0
После давления пряжи в npm были внесены некоторые аналогичные улучшения.
- По умолчанию добавляется package-lock.json, аналогичный yarn.lock;
- оптимизация поддержки зависимостей git: эта функция полезна, когда вам нужно установить большое количество внутренних проектов (например, разработка интрасети без самостоятельно созданных исходных кодов) или когда вам нужно использовать невыпущенные версии определенных зависимостей. Перед этим вам может понадобиться использовать указанный commit_id для контроля версии.
- Оптимизация файловых зависимостей: в предыдущих версиях, если локальный каталог был установлен как зависимость, файловый каталог копировался в node_modules как копия. В npm5 это будет сделано путем создания символических ссылок (кроме использования локальных архивов) вместо копирования файлов. Это ускорит установку. Пряжа в настоящее время не поддерживается.
Суммировать
До npm5.0 преимущества пряжи были особенно очевидны. Но после npm, с помощью приведенной выше серии сравнений, мы видим, что npm5 действительно значительно улучшился в скорости и использовании, и его стоит попробовать, но он не превзошел пряжу.
Подводя итог, мое личное предложение заключается в том, что если вы уже используете пряжу в своем личном проекте и не столкнулись с дополнительными проблемами, вы можете продолжать использовать ее в настоящее время. Но если у вас есть сценарий, совместимый с npm, или вы работаете в команде, использующей npm, cnpm, tnpm, или в проекте, который еще не перешел на yarn, вы можете попробовать npm5 уже сейчас.
Добро пожаловать в обсуждение, ставьте лайк и поехали~
Статьи синхронизируются со следующими сообществами, вы можете выбрать одно, чтобы подписаться на меня 。◕‿◕。
simbawu | github | segmentfault | Знай почти | короткая книга | Наггетс