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

Turborepo中如何设置dev流水线执行顺序,优先启动shared?

解决TurboRepo中Dev服务启动顺序问题

以下是几个可行的方案,解决shared未就绪导致api启动失败的问题:

方案1:分阶段手动/脚本化启动

利用Turbo的--filter参数拆分启动流程,确保shared服务就绪后再启动其他服务:

  • 手动方式:
    1. 第一个终端执行:turbo run dev --filter=shared,等待shared的热重载服务完全启动(比如控制台输出服务就绪的日志)
    2. 第二个终端执行:turbo run dev --filter=!shared,启动api和web的dev服务
  • 脚本化自动启动(推荐):
    可以用Shell脚本结合端口检测工具(如wait-for-it或系统自带的nc),自动等待shared服务就绪后启动其他服务。示例脚本:
    # 启动shared的dev服务并后台运行
    turbo run dev --filter=shared &
    # 等待shared服务的端口(假设为3001)就绪,替换为实际端口
    wait-for-it localhost:3001 -- timeout=30
    # 启动其余服务
    turbo run dev --filter=!shared
    
    若没有wait-for-it,也可以用nc命令实现简单检测:
    turbo run dev --filter=shared &
    while ! nc -z localhost 3001; do sleep 1; done
    turbo run dev --filter=!shared
    

方案2:给shared的Dev脚本添加就绪标记并监听

修改shared的package.json中的dev脚本,当服务完全启动后输出特定标识字符串:

{
  "scripts": {
    "dev": "your-dev-command && echo \"SHARED_SERVICE_READY\""
  }
}

然后编写Shell脚本监听该输出,触发后续服务启动:

#!/bin/bash
# 启动shared的dev并监听输出
turbo run dev --filter=shared | while read -r line; do
  echo "$line"
  # 匹配就绪标识
  if [[ "$line" == *"SHARED_SERVICE_READY"* ]]; then
    # 启动api和web的dev服务
    turbo run dev --filter=!shared &
  fi
done

执行该脚本即可自动按顺序启动所有服务。

方案3:添加前置准备任务结合Turbo依赖

给shared新增一个一次性的prepare-dev脚本,完成初始化(如预编译代码)后退出,再让api和web的dev任务依赖这个前置任务:

  1. 修改shared/package.json:
{
  "scripts": {
    "prepare-dev": "tsc --project tsconfig.json", // 假设是TypeScript项目,预编译一次代码
    "dev": "tsc --watch & node dist/index.js" // 启动热重载监听和服务
  }
}
  1. 修改turbo.json的pipeline配置:
{
  "pipeline": {
    "prepare-dev": {
      "cache": false
    },
    "dev": {
      "cache": false,
      "dependsOn": ["^prepare-dev"],
      "persistent": true
    }
  }
}

执行turbo run dev时,Turbo会先执行所有依赖的prepare-dev任务(即shared的预编译),完成后再启动所有dev服务,确保api启动时shared的代码已就绪。


内容的提问来源于stack exchange,提问作者JC97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:35:12