我在单一存储库中有一个使用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
触发构建的方式设置顺序?
答案 0 :(得分:2)
到目前为止,lerna
中没有优先级。
尽管这是我目前在多个项目中所做的事情:
"scripts": {
...
"build": "lerna run build --ignore=libs-*",
"prebuild": "lerna run build --scope=libs-*"
...
}
注意:prebuild
将自动运行,因此您无需显式调用
此处需要说明的是,您需要在所有Libs
软件包名称前面加上libs-module-name
之类的前缀,或者在诸如@my-org-libs/module-name
之类的范围前加上{{1} }。
另一种解决方案是在@my-org-libs/*
中使用多个Libs
参数显式调用每个--scope=package-name --scope=package-name-2
包。但是,如果您在prebuild
下有许多模块,那可能很快就会变得很难看。