Как поделиться сценариями сборки в пакетах Lerna - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть репозиторий lerna, который содержит несколько пакетов, организованных в обычной структуре:

package.json
/packages
  - alpha
    package.json
  - bravo
    package.json
  - charlie
    package.json

Мне нужно перенести все пакеты, и в настоящее время у меня есть следующие сценарии в каждом пакете package.json:

"build": "npm run build:noWatch -- --watch --verbose",
"build:noWatch": "babel src --out-dir lib --root-mode upward --ignore '**/*.test.js','**/__tests__'",
"prebuild": "rimraf lib/*"

В настоящее время я запускаю сборку, используя:

lerna run build --stream --parallel

Однако я не хочу дублировать эти сценарии для каждого пакета.Я хотел бы определить сценарии в одном месте, но использовать их из всех пакетов.В настоящее время у меня есть скрипты linting и сценарии тестирования в моем корневом пакете, которые имеют смысл, поскольку они эффективно обходят весь монорепо в поисках тестов или файлов для линтинга.Не имеет смысла перемещать сценарии сборки туда, так как они ограничены отдельными пакетами, и мне нравится тот факт, что я получаю вывод различного цвета для каждого пакета, когда я использую lerna run.

Неудовлетворительным решением является создание некоторых сценариев оболочки в корне monorepo и вызов их из файлов package.json пакетов:

In root/packages/example/package.json:

"scripts": {
  "build": "../../scripts/build.sh",
  "build:noWatch": "../../scripts/build.sh",
  "prebuild": "../../scripts/prebuild.sh"
},

Затем в root/scripts/build.sh:

#!/bin/sh 

babel src --out-dir lib --root-mode upward --ignore '**/*.test.js','**/__tests__' --watch --verbose 

Хотя это работает, оно не выглядит правильным: оно все еще включает дублирование между пакетами и требует установки разрешений для сценариев оболочки (что усложняет CI).

Есть ли лучший способ поделиться этими командами среди всех моих пакетов?

1 Ответ

0 голосов
/ 06 декабря 2018

Упакуйте все сценарии сборки в их собственный модуль и затем используйте lerna --hoist для размещения общего модуля, чтобы он был установлен один раз, но доступен для всех других пакетов.

...