我有一个 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 以查找测试或要 lint 的文件。将构建脚本移到那里似乎没有意义,因为它们仅限于单个包,而且我喜欢这样一个事实,即当我使用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 复杂化)。
有没有更好的方法在我的所有包中共享这些命令?