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