Расставьте приоритеты в порядке сборки с рабочими пространствами пряжи и lerna
У меня есть этот большой проект машинописного текста в моно-хранилище, используя yarn workspaces
а также lerna
со следующей архитектурой:
repo
├── API
│ └── (GraphQL API)
├── Apps
│ └── (Front-end React Apps)
├── Libs
│ └── (Shared libraries)
└── Services
└── (Back-end Services)
мой package.json
выглядит примерно так:
{
...
"workspaces": [
"API/**/*",
"Apps/**/*",
"Libs/**/*",
"Services/**/*",
],
"scripts": {
"bootstrap": "lerna bootstrap",
"build": "lerna run build"
}
...
}
мой lerna.json
похоже:
{
"lerna": "2.11.0",
"npmClient": "yarn",
"useWorkspaces": true,
"workspaces": [
"Libs/**/*",
"API/**/*",
"Apps/**/*",
"Services/**/*"
],
"version": "1.0.0"
}
Теперь мне нужно собрать все общие Libs
до того как Apps
а также Services
потому что у них есть зависимости от этого. Но когда я бегу yarn build
и это вызывает lerna run build
кажется, что это вызывает build
обрабатывать в случайном (?) порядке, поэтому он не может быть собран, потому что библиотеки "еще не существует".
Есть ли способ установить порядок, как lerna
запускает сборку?
1 ответ
Там нет приоритетов в lerna
до сих пор.
Хотя вот что я делаю в нескольких проектах на данный момент:
"scripts": {
...
"build": "lerna run build --ignore=libs-*",
"prebuild": "lerna run build --scope=libs-*"
...
}
Замечания: prebuild
будет работать автоматически, поэтому вам не нужно вызывать его явно
Одно предостережение: вам нужно поставить префикс перед всеми Libs
имена пакетов с чем-то вроде libs-module-name
как в примере выше или, возможно, как @my-org-libs/module-name
и позвонить им с @my-org-libs/*
вместо.
Другое решение будет называть каждый Libs
пакет явно с несколькими --scope=package-name --scope=package-name-2
параметр в prebuild
, Но это может быстро стать уродливым, если у вас много модулей под Libs
,