У меня есть репозиторий 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
Однако я не хочу дублировать эти сценарии для каждого пакета. Я хотел бы определить сценарии в одном месте, но использовать их из всех пакетов. В настоящее время у меня есть сценарии линтинга и сценарии тестирования в моем корневом пакете, которые имеют смысл, поскольку они эффективно просматривают весь монорепозиторий в поисках тестов или файлов для линтинга. Нет смысла перемещать туда сценарии сборки, так как они привязаны к отдельным пакетам, и мне нравится тот факт, что я получаю разные цвета для каждого пакета, когда использую lerna run
.
Неудовлетворительное решение - создать несколько сценариев оболочки в корне монорепозитория и вызвать их из 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).
Есть ли лучший способ поделиться этими командами между всеми моими пакетами?