turbo prune命令在Windows(WSL2)及Mac M1/M2环境下失效问题
Turborepo Monorepo跨平台构建异常(WSL2/Mac M1/M2)
基于Turborepo官方文档搭建的monorepo项目,在Linux机器上可正常完成全量构建及Docker容器部署,但在Windows(Win10/11的WSL2)或Mac M1/M2环境下构建完全失败。
核心问题集中在turbo prune命令:该命令本应在容器根目录生成指定包的构建产物(包含各类.json文件、yarn.lock等),用于后续复制到目标目录,但实际执行全程失败。当前使用yarn v1,测试过turbo v1.1.2(Linux环境正常运行)及最新版本,均无法解决问题。
尝试过将子包当作独立根项目,手动补充各类文件修复,但均失败,具体步骤及对应报错如下:
尝试的修复步骤及报错
1. 直接沿用Linux正常构建流程
=> ERROR [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker 0.6s ------ > [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker: #9 0.620 ERROR could not construct graph: Could not find turbo.json. Follow directions at https://turborepo.org/docs/getting-started to create one ------ executor failed running [/bin/sh -c turbo prune --scope=${SCOPE} --docker]: exit code: 1
2. 手动将monorepo根目录的turbo.json复制到子包后
=> ERROR [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker 0.7s ------ > [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker: #9 0.459 2022/07/19 15:35:08 [WARNING] Did not find "packageManager" in your package.json. Please run "npx @turbo/codemod add-package-manager" #9 0.600 2022/07/19 15:35:09 [WARNING] Did not find "packageManager" in your package.json. Please set the "packageManager" field to your package.json #9 0.714 2022/07/19 15:35:09 [WARNING] Did not find "packageManager" in your package.json. Please run "npx @turbo/codemod add-package-manager" #9 0.714 2022/07/19 15:35:09 [WARNING] Did not find "packageManager" in your package.json. Please run "npx @turbo/codemod add-package-manager" #9 0.714 ERROR could not construct graph: could not determine package manager. Please set the "packageManager" property in your root package.json (https://nodejs.org/api/packages.html#packagemanager) or run `npx @turbo/codemod add-package-manager` in the root of your monorepo. ------ executor failed running [/bin/sh -c turbo prune --scope=${SCOPE} --docker]: exit code: 1
3. 在子包package.json中添加packageManager字段后
=> ERROR [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker 0.6s ------ > [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker: #9 0.584 ERROR could not construct graph: yarn.lock: failed to hash lockfile: open yarn.lock: no such file or directory ------ executor failed running [/bin/sh -c turbo prune --scope=${SCOPE} --docker]: exit code: 1
4. 将monorepo根目录的yarn.lock复制到子包后
=> ERROR [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker 0.8s ------ > [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker: #9 0.676 ERROR could not construct graph: could not detect workspaces: package.json: no workspaces found. Turborepo requires Yarn workspaces to be defined in the root package.json ------ executor failed running [/bin/sh -c turbo prune --scope=${SCOPE} --docker]: exit code: 1
5. 在子包package.json中添加monorepo根目录的workspaces配置后
=> ERROR [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker 1.4s ------ > [pruner 3/3] RUN turbo prune --scope=@mycoolproject/pack6 --docker: #9 1.152 panic: runtime error: invalid memory address or nil pointer dereference #9 1.152 [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7d4121] #9 1.152 #9 1.152 goroutine 1 [running]: #9 1.152 turbo/internal/prune.(*PruneCommand).Run(0xc000059850, {0xc00001e0a0, 0x2, 0x2}) #9 1.152 turbo/internal/prune/prune.go:110 +0x3a1 #9 1.153 github.com/mitchellh/cli.(*CLI).Run(0xc00012b900) #9 1.153 github.com/mitchellh/cli@v1.1.2/cli.go:262 +0x5f8 #9 1.153 main.main.func7({0x0, 0x8d6360}, {0xc00001e090, 0x819510, 0x3}, {0x0, 0xc00000e020}, {0x0, 0x0}, 0xc00012b900, ...) #9 1.153 turbo/cmd/turbo/main.go:154 +0x385 #9 1.153 main.main() #9 1.153 turbo/cmd/turbo/main.go:159 +0x9e9 ------ executor failed running [/bin/sh -c turbo prune --scope=${SCOPE} --docker]: exit code: 2
此外,即便侥幸完成构建,多数容器仍会崩溃,提示找不到turbo模块——尽管容器初始构建阶段已全局安装该模块。该项目在Linux机器上使用turbo v1.1.2及最新版本均可正常构建。
内容的提问来源于stack exchange,提问作者Roman B
相关产品推荐
相关产品推荐

