Russian (Pусский) translation by AlexBioJS (you can also view the original English article)
Yarn - это клиент npm (* диспетчер пакетов для Node. Здесь и далее примеч. пер.) с открытым исходным кодом, который был разработан командой Facebook и во многих аспектах превосходит стандартный клиент npm. В данном руководстве я сосредоточусь на рассмотрении шести ключевых характеристиках, которые позволяют Yarn быть превосходным инструментом:
- Скорость
- Надежность установок
- Возможность проверки лицензий
- Совместимость с npm и Bower
- Наличие нескольких реестров
- Возможность использования эмодзи
1. Скорость
Одним из достижений Yarn является его скорость работы по сравнению со стандартным клиентом npm. Но насколько он быстр? Недавно проведенное эталонное тестирование показало, что Yarn был в два-три раза быстрее npm. В этом тесте измерялось время установки React, Angular 2 и Ember. Это весьма надежная проверка менеджера пакетов, поскольку каждый из этих фреймворков нуждается во множестве зависимостей и содержит большую долю зависимостей реальных веб-приложений.
Давайте добавим еще одно значение и самостоятельно протестируем скорость путем установки модуля create-react-app при помощи yarn и npm. Ниже приведен результат установки с использованием yarn:
$ yarn global add create-react-app --prefix /usr/local yarn global v0.27.5 warning package.json: No license field warning No license field [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh packages... success Installed "create-react-app@1.4.0" with binaries: - create-react-app warning No license field Done in 2.59s.
Вот результат установки с использованием npm:
$ npm install -g create-react-app /usr/local/bin/create-react-app -> /usr/local/lib/node_modules/create-react-app/index.js + create-react-app@1.4.0 added 80 packages in 9.422s
Да. Этот результат бесспорно согласуется с другими сообщениями о значительном преимуществе yarn в скорости. Yarn установил модули за 2.59 секунд, тогда как npm потребовалось 9.422 секунд. Yarn был быстрее в 3.63 раза.
2. Надежность установок
Также yarn может похвастаться более надежными установками, чем npm. Когда установка считается ненадежной? Если при последующих установках происходит сбой или получается другой результат, то установка является ненадежной. Это может происходить по двум причинам:
- Кратковременные проблемы компьютерной сети могут послужить причиной сбоя при получении пакетов.
- Результатом выхода новых версий пакетов могут быть изменения, несовместимые с другими пакетами и нарушающие работу приложения.
Yarn справляется с обоими проблемами.
Офлайн кэш
Yarn использует глобальный офлайн кэш для сохранения пакетов, которые вы однажды установили, поэтому при установках новых версий используется кэшированная версия и достигается устойчивость к периодическим сбоям компьютерной сети. Вы можете узнать о расположении кэша yarn у вас при помощи команды:
$ yarn cache dir /Users/gigi.sayfan/Library/Caches/Yarn/v1
Вот первые пять пакетов моего офлайн кэша:
$ ls `yarn cache dir` | head -5 npm-@kadira npm-@types npm-Base64-0.2.1-ba3a4230708e186705065e66babdd4c35cf60028 npm-JSONStream-0.8.4-91657dfe6ff857483066132b4618b62e8f4887bd npm-abab-1.0.3-b81de5f7274ec4e756d797cd834f303642724e5d
Yarn способен на большее. У него может быть полное офлайн зеркало (* копия), которое будет использоваться обновлёнными версиями yarn.
Файл yarn.lock
Файл yarn.lock (* файл для блокировки ресурсов yarn) обновляется каждый раз, когда вы добавляете или обновляете версию пакета. В нем определяется, главным образом, точная версия каждого пакета, которая может быть указана в package.json при помощи частичного определения версии (например, указаны только главный и второстепенный номера версии), и его зависимостей.
Ниже приводится начало типичного файла yarn.lock. Вы можете увидеть версию такую, как она указана в package.json, например, "abbrev@1", и точно определенную версию "1.1.0".
cat yarn.lock | head -18 # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 abab@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/- /abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" abbrev@1: version "1.1.0" resolved "https://registry.yarnpkg.com/abbrev/- /abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" accepts@~1.3.3: version "1.3.4" resolved "https://registry.yarnpkg.com/accepts/ -/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" dependencies: mime-types "~2.1.16" negotiator "0.6.1"
Но почему?
Также yarn предоставляет вам команду yarn why
для объяснения причины установки определенного пакета в вашем проекте:
$ yarn why worker-farm yarn why v0.27.5 [1/4] Why do we have the module "worker-farm"...? [2/4] Initialising dependency graph... [3/4] Finding dependency... [4/4] Calculating file sizes... info This module exists because "react-scripts#jest#jest-cli" depends on it. info Disk size without dependencies: "132kB" info Disk size with unique dependencies: "212kB" info Disk size with transitive dependencies: "244kB" info Number of shared dependencies: 2 Done in 1.38s.
3. Возможность проверки лицензий
Для некоторых проектов необходимо соблюдение определенных лицензионных требований или просто создание отчета для собственных или внешних целей. Это легко осуществляется при помощи команды Yarn yarn licenses ls
. В результате создается компактный отчет, включающий официальное имя пакета, его URL-адрес и лицензию. Ниже представлен пример:
$ yarn licenses ls | head -20 yarn licenses v0.27.5 ├─ abab@1.0.3 │ ├─ License: ISC │ └─ URL: git+https://github.com/jsdom/abab.git ├─ abbrev@1.1.0 │ ├─ License: ISC │ └─ URL: https://github.com/isaacs/abbrev-js ├─ accepts@1.3.4 │ ├─ License: MIT │ └─ URL: https://github.com/jshttp/accepts.git ├─ acorn-dynamic-import@2.0.2 │ ├─ License: MIT │ └─ URL: https://github.com/kesne/acorn-dynamic-import ├─ acorn-globals@3.1.0 │ ├─ License: MIT │ └─ URL: https://github.com/ForbesLindesay/acorn-globals.git ├─ acorn-jsx@3.0.1 │ ├─ License: MIT │ └─ URL: https://github.com/RReverser/acorn-jsx
Yarn может даже создать для вас отказ от ответственности при выполнении команды yarn licenses generate-disclaimer
. В результате выводится текст с сообщением об отказе от ответственности и текст для каждого пакета вашего приложения. Ниже приведен фрагмент отказа от ответственности, сгенерированного для моего тестового проекта.
----- The following software may be included in this product: utils-merge. A copy of the source code may be downloaded from git://github.com/jaredhanson/utils-merge.git. This software contains the following license and notice below: (The MIT License) Copyright (c) 2013 Jared Hanson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----- The following software may be included in this product: uuid. A copy of the source code may be downloaded from https://github.com/defunctzombie/node-uuid.git. This software contains the following license and notice below: Copyright (c) 2010-2012 Robert Kieffer MIT License - http://opensource.org/licenses/mit-license.php -----
4. Совместимость с npm и Bower
Yarn полностью совместим с npm, поскольку является просто другим клиентом, который работает с реестрами npm. В самом начале развития Yarn поддерживал Bower, однако немного спустя было принято решение прекратить поддержку Bower.
Основной причиной была не очень хорошая совместимость с Bower. При этом освобождалась папка bower_components или не доставлялся ни один пакет в новом проекте. Однако другой причиной является то, что команда Yarn не хотела поддерживать разделение в области управления пакетами и, наоборот, предпочитала переключение всех на npm.
Если вы заинтересованы в использовании Bower и не хотели бы переходить на другой менеджер пакетов прямо сейчас, вы по-прежнему можете использовать Yarn, однако, добавьте следующий фрагмент кода в ваш файл package.json.
"scripts": { "postinstall": "bower install" }
5. Наличие нескольких реестров
Yarn может работать с несколькими типами реестров. Если вы просто добавляете пакет, то, по умолчанию, Yarn будет использовать свой реестр npm (который не является стандартным реестром npm). Однако, Yarn также может добавлять пакеты из файлов, удаленных tar-архивов с исходным кодом или удаленных репозиториев git (* система контроля версий).
Чтобы посмотреть текущий сконфигурированный реестр npm, выполните:
$ yarn config get registry https://registry.yarnpkg.com
Для того чтобы установить другой тип реестра, используйте: yarn config set registry <registry url>
Для добавления пакетов из разных источников используйте следующие команды для добавления:
# Configured npm registry yarn add <pkg-name> # Local package yarn add file:/<path to local package directory # Remote tarball yarn add https://<path to compressed tarball>.tgz # Remote git repo yarn add <git remote-url>
6. Эмодзи «рулят»!
Одним людям нравятся эмодзи, другим нет. Изначально Yarn отображал эмодзи автоматически, однако только на операционной системе Mac OS X. В результате на Yarn посыпались камни с двух сторон: ненавистники эмодзи были огорчены тем, что их консоль пестрила эмодзи, в то время как любители эмодзи были расстроены отсутствием эмодзи на Windows и Linux.
Сейчас эмодзи по умолчанию не отображаются на macOS, и вы можете включить эмодзи при помощи флажка --emoji
:
$ yarn install --emoji yarn install v0.27.5 [1/4] 🔍 Resolving packages... [2/4] 🚚 Fetching packages... [3/4] 🔗 Linking dependencies...Yarn является лучшим менеджером пакетов для JavaScript Он сходен с npm, однако значительно быстрее. Yarn разрешает серьезные проблемы «хрупкой» установки крупномасштабных проектов, поддерживает использование множества типов реестров и в добавок предоставляет возможность применять эмодзи. t. Как вы видите, помимо соответствующих ресурсов для изучения JavaScript также, чтобы вы не скучали, имеется множество библиотек и фреймворков. Если вы ищите дополнительные ресурсы для изучения или использования в работе, гляньте, что у нас есть на Envato marketplace.a>.
Все сообщество JavaScript - разработчиков очень позитивно отреагировало на появление Yarn. Также происходит много шумихи вокруг Yarn. Yarn уже справился с некоторыми проблемами, например, излишней поддержкой Bower и использованием эмодзи по умолчанию. Переход с npm на использование Yarn проходит очень легко. Обязательно его попробуйте.ry.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post