Expo在Turbo Monorepo中启动时卡在Metro Bundler环节
Turbo + Expo 启动卡主问题诊断与解决
一、检查Turbo任务的工作目录配置
Turbo默认在根目录执行任务,但Expo需要在site/dock子目录下运行。如果你的turbo.json没指定子任务的工作目录,就会导致Expo在错误路径启动进而卡主。
- 打开根目录的
turbo.json,找到dev任务的pipeline配置,给site/dock的任务加上"cwd": "site/dock":
{ "pipeline": { "dev": { "cache": false, "dependsOn": ["^dev"], "tasks": { "site/dock": { "cwd": "site/dock" } } } } }
- 或者直接修改根目录
package.json的dev脚本为:"dev": "turbo run dev --filter=site/dock",强制Turbo只在指定子目录执行任务。
二、排查Turbo的进程隔离与资源限制
Turbo的进程隔离机制可能限制Expo的资源访问,或者端口被其他Turbo子进程占用:
- 用
lsof -i :19000(macOS/Linux)或netstat -ano | findstr :19000(Windows)检查19000端口是否被占用,若有则杀掉对应进程后重试 - 尝试添加
--no-daemon参数运行:pnpm dev --no-daemon,禁用Turbo的守护进程模式,避免进程隔离导致的异常 - 检查
.turbo/config.json(如果存在),确认没有设置文件描述符、内存等资源限制,避免覆盖你之前提升的系统级限制
三、确保环境变量正常传递
Expo启动依赖的环境变量可能被Turbo拦截,导致启动异常:
- 在
turbo.json的dev任务配置中添加env字段,允许传递Expo相关变量:
{ "pipeline": { "dev": { "env": ["EXPO_*", "NODE_ENV"] } } }
- 确认
site/dock目录下的.env文件(如果有)中的变量(比如EXPO_PORT、EXPO_DEVTOOLS_LISTEN_ADDRESS)能被Turbo正确传递
四、进一步调试手段
- 开启Turbo详细日志:
pnpm dev --verbose,查看子任务执行的完整输出,找是否有被隐藏的错误信息 - 修改
site/dock/package.json的start脚本为expo start --verbose,通过Turbo运行时能看到Expo启动的详细流程,定位卡主的具体环节 - 清理Turbo缓存:
pnpm turbo clean,避免缓存残留导致的异常
内容的提问来源于stack exchange,提问作者Lance Pollard
相关产品推荐
相关产品推荐

