Расставьте приоритеты в порядке сборки с рабочими пространствами пряжи и lerna

У меня есть этот большой проект машинописного текста в моно-хранилище, используя 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 запускает сборку?

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/* вместо.

Другое решение будет называть каждый Libs пакет явно с несколькими --scope=package-name --scope=package-name-2 параметр в prebuild, Но это может быстро стать уродливым, если у вас много модулей под Libs,

Другие вопросы по тегам