Перейти к основному содержимому
Неофициальный Бета-перевод

Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →

Конфигурация конвейера задач

Lerna делегирует выполнение npm-скриптов (создание дочерних процессов и т.д.) Nx. Файл nx.json — это место, где вы можете настроить, как Nx это делает.

совет

Если у вас нет файла nx.json, выполните npx lerna add-caching.

Выполнение задач параллельно

Если вы хотите увеличить количество процессов, выполняющих скрипты, например, до 5 (по умолчанию 3), передайте следующий параметр:

npx lerna run build --concurrency=5

Определение зависимостей задач (также известных как конвейеры задач)

Без дополнительной настройки Lerna не может определить, какие цели (scripts) имеют предварительные условия. Зависимости задач можно определить в файле nx.json:

nx.json
{
...
"targetDefaults": {
"build": {
"dependsOn": ["^build"]
}
}
}

Теперь Lerna знает, что перед сборкой проекта необходимо сначала собрать все его зависимости. Однако для тестов таких ограничений нет.

После определения свойства targetDefaults флаг sort игнорируется.

Этот механизм очень гибкий. Рассмотрим следующий пример:

nx.json
{
...
"targetDefaults": {
"build": {
"dependsOn": ["^build", "prebuild"]
},
"test": {
"dependsOn": ["build"]
}
}
}

Примечание: в более ранних версиях Nx использовалось targetDependencies вместо targetDefaults. Оба варианта работают, но рекомендуется использовать targetDefaults.

Символ ^ (каретка) означает зависимости. Таким образом, "test": { "dependsOn": ["build"] } означает, что цель "test" конкретного проекта требует завершения его собственной цели "build", тогда как "build": { "dependsOn": ["^build"] } означает, что цель "build" проекта требует завершения целей "build" всех его зависимостей.

При выполнении lerna run test --scope=myproj данная конфигурация предпишет Lerna:

  1. Выполнить команду test для myproj

  2. Но из-за зависимости test -> build Lerna сначала выполнит build для myproj

  3. Сам build имеет зависимости от prebuild (в том же проекте) и build всех зависимостей. Поэтому сначала выполнится скрипт prebuild, а затем build для всех зависимостей.

Обратите внимание: Lerna не обязана выполнять все сборки перед запуском тестов. Оркестратор задач будет запускать максимальное количество параллельных задач с учётом ограничений.

Подобные ситуации довольно распространены:

Смешивание целей

Правила, описанные в nx.json, применяются ко всем проектам в репозитории. Для определения правил конкретного проекта добавьте их в package.json этого проекта.

{
...
"nx": {
"targets": {
"test": {
"dependsOn": [
"build"
]
}
}
}
}