优先使用纱线工作区和 lerna 构建顺序

Mar*_*iel 8 build typescript lerna yarnpkg yarn-workspaces

我在单一存储库中有这个大型打字稿项目,使用yarn workspaceslerna具有以下架构:

repo
??? API
?   ??? (GraphQL API)
??? Apps
?   ??? (Front-end React Apps)
??? Libs
?   ??? (Shared libraries)
??? Services
    ??? (Back-end Services)
Run Code Online (Sandbox Code Playgroud)

package.json看起来像:

{
   ...
   "workspaces": [
        "API/**/*",
        "Apps/**/*",
        "Libs/**/*",
        "Services/**/*",
    ],
    "scripts": {
        "bootstrap": "lerna bootstrap",
        "build": "lerna run build"
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的lerna.json样子:

{
    "lerna": "2.11.0",
    "npmClient": "yarn",
    "useWorkspaces": true,
    "workspaces": [
        "Libs/**/*",
        "API/**/*",
        "Apps/**/*",
        "Services/**/*"
    ],
    "version": "1.0.0"
}
Run Code Online (Sandbox Code Playgroud)

现在我需要Libs在两者之前构建所有共享AppsServices因为它们依赖于它。但是,当我运行yarn build并触发时,lerna run build它似乎build以随机(?)顺序触发该过程,因此无法构建,因为库“尚不存在”。

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

Jac*_*ane 9

lerna到目前为止没有优先级。

虽然这是我目前在几个项目中所做的:

"scripts": {
  ...
  "build": "lerna run build --ignore=libs-*",
  "prebuild": "lerna run build --scope=libs-*"
  ...
}
Run Code Online (Sandbox Code Playgroud)

注意:prebuild会自动运行,所以你不需要显式调用它

这里的一个警告是,您需要在所有Libs包名称前加上libs-module-name上面的示例或范围之类的前缀,@my-org-libs/module-name@my-org-libs/*改为使用它们来调用它们。

另一个解决方案是调用每个Libs包明确有多个--scope=package-name --scope=package-name-2参数prebuild。但是,如果您在Libs.