使用纱线工作区和lerna对构建顺序进行优先级排序



我在mono存储库中有一个大型typescript项目,使用yarn workspaceslerna,具有以下架构:

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"
}

现在我需要在AppsServices之前构建所有共享的Libs,因为它们都有依赖关系。但当我运行yarn build并触发lerna run build时,它似乎以随机(?(顺序触发了build进程,所以它无法构建,因为库"还不存在"。

有没有办法设置lerna如何触发构建的顺序?

到目前为止,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/*来调用它们。

另一种解决方案是用prebuild中的多个--scope=package-name --scope=package-name-2参数显式调用每个Libs包。但是,如果Libs下有许多模块,这可能会很快变得很难看。

最新更新