【问题标题】:Prioritize build order with yarn workspaces and lerna使用 yarn 工作区和 lerna 优先构建顺序
【发布时间】:2019-01-01 23:59:14
【问题描述】:

我在使用 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 如何触发构建的顺序?

【问题讨论】:

    标签: typescript build yarnpkg lerna yarn-workspaces


    【解决方案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/* 代替。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 2021-06-25
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2021-12-15
      • 2018-02-23
      • 2022-09-27
      相关资源
      最近更新 更多