You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:05:15