Расставьте приоритеты в порядке сборки с помощью пряжи и 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 запускает сборку?


person Marco Daniel    schedule 25.07.2018    source источник


Ответы (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.

person JacopKane    schedule 29.09.2018