- PVSM.RU - https://www.pvsm.ru -
Yarn — менеджер пакетов для ноды — выпустили вторую версию [1]. И, похоже, парни серьёзно вознамерились изменить статус-кво в экосистеме ноды, а то и вообще в пакетных менеджерах. Удаляйте все свои картинки про гигабайтные мамки node_modules, убирайте yarn install
из скриптов CI, мы начинаем очередную великую JavaScript-смуту. Если вкратце:
Если вы не хотите обновлять все ваши проекты, просто запустите
yarn policies set-version ^1
(смотри legacy.yarnpkg.com/en/docs/cli/policies [2]) в репозиториях, которые должны остаться на Yarn 1 и закомитьте результат. Тогда Yarn будет использовать локальные бинарники Yarn 1 вместо глобальных так что все в команде будут использовать одну версию!
В целом, прослеживается два направления развития: а) максимальная воспроизводимость окружения и б) движение в сторону платформы для менеджмента пакетов.
По поводу первого пункта yarn загонялся всегда — собственно, это и было причиной по которой он когда-то появился, мигом потеснив npm (напомню, тогда запуск npm install мог давать разные результаты, потому что lock-файл в мире ноды — это заслуга yarn). Хотя лично я перешёл на него из-за бесящей строчки в логах npm [5].
Но теперь они решили, так сказать, пушнуть до лимита. При добавлении пакета он (и все его зависимости), в виде zip архива добавляется в кеш, в папку .yarn в папке пакета (как .git). Вместо node_modules создаётся файлик .pnp.js, который и обрабатывает импорты модулей. Важных следствия два:
По поводу платформы же — парни перешли на архитектуру плагинов (то есть yarn в первую очередь как API, а уже потом как CLI) и даже заявляли что хотят отвязаться от ноды как таковой, сделав yarn generic-решением для выстраивания собственных менеджеров пакетов [6].
Звучит интересно, амбициозно и слегка самоуверенно. Посмотрим, справятся ли они или заглохнут уже на этапе PnP-first.
Во всяком случае, я попробую перевести наш проект на yarn 2, если получится — это будет приятно. Вы как?
UPD: Про пролог в заголовке — это не шутка, на нём можно будет писать правила проверки воркспейсов, next.yarnpkg.com/features/constraints [9]
Далее — выжимка из официального анонса [1].
Вывод в консоль переделан для лучшей читаемости
Команды CLI (yarn add
, ...) теперь учитывают воркспейсы
Можно избавиться от yarn install
внутри своего репозитория
Менее опасная альтернатива npx: yarn dlx
, чтобы запускать одноразовые штуки
Запуск команды на всех воркспейсах с yarn workspaces foreach
Манкипатчинг пакетов через протокол patch:
Ссылки на локальные пакеты через протокол portal:
Новый воркфлоу чтобы нормально релизить воркспейсы
Декларативная проверка и фиксы воркспейсов (PROLOG INCLUDED)
Пакеты билдятся только если без этого совсем уж никак
Билды пакетов могут быть включены/выключены
Скрипты выполняются в универсальном шелле
Peer dependencies работают даже через yarn link
Локфайл стал обычным YAML
Весь код теперь на TypeScript
Поддержка плагинов
Настройки стали единообразными
Пакеты должны соблюдать свои границы
Bundle dependencies больше не поддерживаются
Пакеты хранятся в read-only архивах
Детальный чейнджлог здесь [10], инструкции по обновлению — здесь [11].
Спасибо нашим бета-тестерам и общей поддержке экосистемы, мы облегчили кучу боли, связанной с таким массивным обновлением. Руководство по переезду [11] расскажет детальней, но в целом пока вы используете последние версии инструментов (ESLint, Babel, TypeScript, Gatsby, и т.д.), всё должно быть норм.
Но есть один значимый косяк: Flow и React-Native сейчас нельзя использовать с Plug’n’Play (PnP). Мы ищем пути сотрудничества с их командами чтобы всё заработало. Сейчас же вы можете оставаться на Yarn 1 или использовать плагин node_modules [12], который предоставляет обратную совместимость для облегчения перехода (он всё ещё в работе, могут быть баги). Больше — здесь [13].
Yarn 1.22 зарелизится на следующей неделе. После это ветка 1.x официально войдёт в режим доживания — то есть, не будет никаких релизов, кроме фиксов уязвимостей. Новые фичи будут делаться исключительно в Yarn 2. На практике это означает:
Мы ожидаем что большинство этих изменений будут закончены к 1 февраля 2020 года.
Автор: Иван Плесских
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/345118
Ссылки в тексте:
[1] выпустили вторую версию: https://dev.to/arcanis/introducing-yarn-2-4eh1
[2] legacy.yarnpkg.com/en/docs/cli/policies: https://legacy.yarnpkg.com/en/docs/cli/policies
[3] pic.twitter.com/FxRSw4pbmZ: https://t.co/FxRSw4pbmZ
[4] January 25, 2020: https://twitter.com/markdalgleish/status/1221167427288911872?ref_src=twsrc%5Etfw
[5] бесящей строчки в логах npm: https://github.com/npm/npm/pull/19198
[6] хотят отвязаться от ноды как таковой, сделав yarn generic-решением для выстраивания собственных менеджеров пакетов: https://github.com/yarnpkg/yarn/issues/6953
[7] pic.twitter.com/ZErZkTlRp2: https://t.co/ZErZkTlRp2
[8] January 27, 2020: https://twitter.com/mattcompiles/status/1221625066347089925?ref_src=twsrc%5Etfw
[9] next.yarnpkg.com/features/constraints: https://next.yarnpkg.com/features/constraints
[10] здесь: https://github.com/yarnpkg/berry/blob/master/CHANGELOG.md
[11] здесь: https://yarnpkg.com/advanced/migration
[12] плагин node_modules: https://github.com/yarnpkg/berry/tree/master/packages/plugin-node-modules
[13] здесь: https://yarnpkg.com/advanced/migration#if-required-install-the-node-modules-plugin
[14] yarnpkg/berry: https://github.com/yarnpkg/berry
[15] скорее всего будет идти с Yarn 2 начиная с Node 14: https://github.com/nodejs/docker-node/issues/1180
[16] yarnPath: https://yarnpkg.com/configuration/yarnrc#yarnPath
[17] yarn set version: https://yarnpkg.com/cli/set/version
[18] Источник: https://habr.com/ru/post/486330/?utm_source=habrahabr&utm_medium=rss&utm_campaign=486330
Нажмите здесь для печати.