Nx - это набор расширяемых инструментов разработки для монорепозиториев, который мы в Nrwl разработали на основе нашего опыта работы в Google и помогая Fortune 500 создавать амбициозные приложения Angular.
Мы выпустили Nx 6.0 месяц назад, и сегодня мы рады объявить о выпуске Nx 6.1, который содержит множество улучшений для удобства использования и исправлений ошибок.
Создание и тестирование одного проекта против создания и тестирования множества проектов
С помощью Angular CLI мы можем создавать, тестировать и линтировать индивидуальный проект следующим образом:
ng build myapp ng test myapp ng test mylib ng lint myapp ng lint mylib ng e2e myapp-e2e
Запуск ng build|test|lint
без указания имени проекта не позволяет передавать параметры (например, ng build --prod
приведет к ошибке), что делает эти команды пригодными для использования только с одним проектом.
Nx может здесь помочь. Следующая команда построит / тестирует / lint все проекты в нашем репозитории.
yarn affected:build --all yarn affected:test --all yarn affected:lint --all yarn affected:e2e --all
И мы можем передавать параметры, например: yarn affected:build --all --prod
.
Разумное строительство
В Nrwl мы рекомендуем людям использовать разработку в стиле монорепозитория (подробнее здесь), аналогично тому, как Google, Facebook и многие другие компании создают программное обеспечение. В результате может получиться репозиторий, содержащий десятки приложений и сотни библиотек. Восстановление и повторное тестирование всех из них каждый раз, когда мы вносим изменения, не масштабируются. Вот почему --all
следует использовать редко.
Чтобы показать, как Nx может улучшить этот опыт, представьте, что у нас есть репозиторий с двумя приложениями и тремя библиотеками.
Теперь предположим, что мы отошли от мастера и внесли изменение в код. Мы не заинтересованы в восстановлении и повторном тестировании всего - нас интересует только восстановление и повторное тестирование проектов, на которые может повлиять наше изменение. Мы можем сделать это следующим образом:
yarn affected:build --base=master yarn affected:test --base=master yarn affected:lint --base=master yarn affected:e2e --base=master
При использовании --base
Nx будет смотреть на изменения кода в нашей ветке (включая как зафиксированные, так и незафиксированные изменения). Затем Nx будет использовать свой анализ кода, чтобы выяснить, на что могут повлиять изменения кода, и повторно выполнит только минимальный набор необходимых команд.
Скажем, например, мы изменили libs / lib1 / src / index.ts. После анализа репо Nx повторно протестирует только следующие проекты:
Полезный совет: запустите команду «yarn blocked: dep-graph --base = master», чтобы узнать, на что влияет ваш PR.
При работе в CI часто необходимо указать и базу, и головку. Мы можем сделать это следующим образом:
yarn affected:build --base=origin/master --head=HEAD yarn affected:test --base=origin/master --head=HEAD yarn affected:lint --base=origin/master --head=HEAD yarn affected:e2e --base=origin/master --head=HEAD
Внося серьезные изменения в большую кодовую базу, мы не хотим повторно тестировать все затронутые проекты снова и снова. Вероятно, мы хотим повторно протестировать только те, которые не прошли в прошлый раз. С Nx это просто:
yarn affected:build --base=master --only-failed yarn affected:test --base=master --only-failed yarn affected:lint --base=master --only-failed yarn affected:e2e --base=master --only-failed
Наконец, мы можем запустить --help
, чтобы увидеть все доступные параметры, поддерживаемые командами affected:*
.
yarn affected:build --help yarn affected:test --help yarn affected:lint --help yarn affected:e2e --help
Масштабирование
Большинство изменений кода в Nx Workspace повлияют только на несколько проектов, поэтому их пересборка и повторное тестирование обычно выполняется довольно быстро. Однако некоторые изменения кода значительны и могут привести к перестройке всего репозитория. Чтобы ускорить этот процесс, мы улучшили поддержку параллелизма в Nx 6.1.
yarn affected:build --base=master --parallel yarn affected:test --base=master --parallel yarn affected:lint --base=master --parallel yarn affected:e2e --base=master --parallel
Мы также можем передать --maxParallel
, чтобы указать количество параллельных процессов.
Неявные зависимости
Nx использует свой встроенный интеллект для создания графа зависимостей приложений и библиотек, который используется для определения того, что необходимо перестроить и протестировать. Однако есть определенные файлы, которые Nx не может проанализировать. Вот почему Nx поддерживает неявные зависимости. Они определены в nx.json.
{ "npmScope": "mycompany", "implicitDependencies": { "package.json": "*", "angular.json": "*", "tsconfig.json": "*", "tslint.json": "*", "nx.json": "*" }, projects: {} }
Строка ”package.json”: “*”
сообщает Nx, что изменение в package.json повлияет на каждый отдельный проект. Поскольку файла README корневого уровня нет в списке, его изменение ни на что не повлияет.
Мы можем быть более конкретными и перечислить проекты, на которые повлияет конкретный файл.
{ "npmScope": "mycompany", "implicitDependencies": { "package.json": "*", "angular.json": "*", "tsconfig.json": "*", "tslint.json": "*", "nx.json": "*", "tools/scripts/app1-rename-bundles.js": ["app1"] }, projects: {} }
Попробуйте!
Создание новой рабочей области
Установите новую версию Nx, запустив: yarn global @nrwl/schematics
. Затем создайте новое рабочее пространство, запустив ng new myorg --collection=@nrwl/schematics
.
Или добавьте возможности Nx в существующий проект Angular CLI, используя ng add @nrwl/schematics
.
Если ваши глобально установленные пакеты npm находятся в плохом состоянии, запустите create-nx-workspace myorg
, который создаст новое рабочее пространство с использованием изолированной среды.
Обновление с Nx 6.0
Если вы уже являетесь пользователем Nx 6, обновите свое рабочее пространство до Nx 6.1, запустив ng update @nrwl/[email protected]
.
Обновление с Nx 1.x
Если вы уже являетесь пользователем Nx 1.x, обновите свое рабочее пространство для использования Nx 6.1, запустив yarn add @nrwl/schematics@latest --dev
(или npm install @nrwl/schematics@latest — save-dev
) для установки новой версии Nx, а затем запустив yarn update (или npm run update
).
Процесс обновления Nx зависит от процесса обновления Angular CLI. Поскольку Angular CLI 1.7 и Angular CLI 6 во многом отличаются, процесс обновления не идеален, поэтому после выполнения команды обновления может потребоваться несколько изменений.
Мы сделали все возможное, чтобы справиться с наиболее распространенными настройками. Но если вы думаете, что мы можем сделать больше, сообщите о проблеме на странице http://github.com/nrwl/nx.
Учить больше
- Анонс Nx 6.0 - хороший обзор всех основных возможностей.
- Видеокурс по использованию Nx Workspaces
Виктор Савкин - соучредитель Nrwl. Мы помогаем компаниям развиваться, как Google, с 2016 года. Мы предоставляем консультации, инжиниринг и инструменты.
Если вам это понравилось, нажмите 👏 ниже, чтобы другие люди увидели это здесь, на Medium. Подпишитесь на @victorsavkin, чтобы узнать больше о монорепозиториях, Nx, Angular и React.