我的涡轮回购单存储库中有三个软件包,top
,middle
和bottom
。top
取决于middle
,middle
取决于bottom
。
如果我这样做:
cd bottom
make some edits
cd ../middle
make some edits
我想在该目录(middle
)中键入一些内容,它将构建middle
依赖的所有内容(即bottom
)并middle
自己。
我知道我可以cd到项目的根目录并这样做:
turbo run build --filter=middle...
但我想要一个命令(或脚本)知道我在哪个目录中,基本上说"构建所有内容并包括这里">
如果它对任何人有用,我通过.zshrc
将其添加到
find-up () {
path=$(pwd)
while [[ "$path" != "" && ! -e "$path/$1" ]]; do
path=${path%/*}
done
echo "$path"
}
bt () {
ROOT_DIR=$(find-up "pnpm-workspace.yaml")
PKG_NAME=$(npm pkg get name | sed -e s#"##g)
(cd $ROOT_DIR && pnpm run build --filter=$PKG_NAME...)
}
现在我可以 cd 到middle
并键入bt
(代表构建到),它将构建所有内容,包括当前包。 很想知道更好的方法!
根据 TurboRepo 的文档,您只需要在 turbo.json 中的pipeline.build
中添加"dependsOn": ["^build"]
。 在 monorepo top 文件夹上运行npm run build
时,它应根据每个工作区的依赖项按顺序生成。
下面是turbo.json
文件的示例。
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
// "A workspace's `build` command depends on its dependencies'
// and devDependencies' `build` commands being completed first"
"dependsOn": ["^build"],
"outputs": [".next/**", "!.next/cache/**"]
}
}