8

我在一个单一存储库中有这个大型打字稿项目,使用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"
}

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

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

4

1 回答 1

9

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.

于 2018-09-29T01:08:47.923 回答