我有一个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脚本和测试脚本,它们在这里很有意义,因为它们有效地遍历了整个monorepo来寻找测试或要生成文件的文件。将构建脚本移到那里以及将它们限制在各个包中似乎没有任何意义,而且我喜欢这样的事实,当我使用lerna run
时,每个包会得到不同的颜色输出。
一个不令人满意的解决方案是在monorepo的根目录中创建一些shell脚本,然后从软件包的package.json
文件中调用它们:
在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
虽然可行,但感觉不对:它仍然涉及程序包之间的重复,并且需要在shell脚本上设置权限(这会使CI复杂化)。
是否有更好的方法可以在我的所有软件包中共享这些命令?