Как поделиться скриптами сборки в пакетах Lerna

У меня есть репозиторий 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).

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


person Undistraction    schedule 03.12.2018    source источник
comment
вы еще не наткнулись на это? github.com/Cosium/dry-dry   -  person Tiago Coelho    schedule 12.12.2018
comment
@TiagoCoelho Спасибо за ссылку. Выглядит интересно.   -  person Undistraction    schedule 12.12.2018


Ответы (1)


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

person Old Pro    schedule 05.12.2018
comment
Как бы вы выставили скрипты из пакета? - person Undistraction; 06.12.2018
comment
@Undistraction Поместите сценарии в каталог bin пакета, а затем назовите их ./node_modules/scriptpackage/bin/build.sh в пакетах, которые их используют. - person Old Pro; 06.12.2018
comment
Я так понимаю, вы имеете в виду lerna bootstrap --hoist. - person Gudlaugur Egilsson; 21.04.2020