如何让Turborepo在所有应用文件夹中执行deploy命令
Turborepo CI环境下deploy命令漏识别工作区问题解决
问题复现条件
- 技术栈版本:
turbo@1.3.1、pnpm@7.4.1 - 目录结构:
/apps目录下存在2个嵌套应用,两个应用的package.json均已配置deploy命令 - 表现差异:
- 本地Windows 10环境执行根目录
pnpm run deploy,可正常触发两个应用的deploy流程 - GitHub Action Ubuntu最新环境执行同命令,仅识别到1个工作区的deploy任务;同环境下
build命令可正常识别两个工作区执行
- 本地Windows 10环境执行根目录
现有配置
根目录package.json脚本配置:
"deploy": "turbo run deploy --parallel"
根目录turbo.json pipeline配置:
{ "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] }, "deploy": { "cache": false }, "lint": { "outputs": [] }, "dev": { "cache": false } } }
排查&解决步骤
- 优先排查跨平台大小写兼容问题
Windows文件系统/脚本匹配默认大小写不敏感,Linux环境为严格大小写匹配。由于build命令可正常识别两个工作区,说明pnpm工作区注册无异常,大概率是其中一个应用的package.json里deploy脚本名存在大小写偏差、前后带多余空格、拼写错误,导致Linux环境下Turborepo匹配不到对应脚本,本地Windows环境可正常容错识别。修正脚本名保证两个应用的脚本键名完全为小写deploy、无多余字符即可。 - 强制指定执行范围兜底
如果确认脚本名完全无问题,修改根目录deploy命令,增加--force和明确的filter参数,强制扫描apps下所有应用执行:
"deploy": "turbo run deploy --parallel --force --filter='./apps/*'"
参数说明:
--force:忽略Turbo的变更检测、缓存逻辑,强制触发所有匹配任务--filter='./apps/*':明确指定任务执行范围为/apps目录下所有工作区,跳过Turbo的自动识别逻辑,从根源避免漏扫
内容的提问来源于stack exchange,提问作者SebastianG
相关产品推荐
相关产品推荐

