TurboRepo配置:按需运行指定Web工作区及部分服务
工作区命令配置需求
我的工作区结构如下:
- apps
- web-1 (next)
- web-2 (next)
- web-3 (next)
- packages
- pack-1 (ui)
- pack-2 (react utils)
- pack-3 (node utils)
- services
- service-1 (express)
- service-2 (express)
- service-3 (express)
- service-4 (express)
我希望能执行yarn dev:web-1、yarn dev:web-2或yarn dev:web-3命令,要求这些命令始终加载所有packages,同时仅启动1至2个指定的services。目前执行yarn dev会启动所有服务,我不得不调高--concurrency参数,这不是我想要的操作。
解决方案
方法一:用TurboRepo配置(推荐monorepo场景)
- 编辑根目录的
turbo.json,定义任务管道规则:
{ "$schema": "https://turbo.build/schema.json", "pipeline": { "dev": { "dependsOn": ["^dev"], "cache": false } } }
这里的^dev表示任务会依赖所有上游依赖包的dev任务,确保packages的代码能被正确加载。
- 在根目录的
package.json里添加自定义脚本:
{ "scripts": { "dev:web-1": "turbo run dev --filter=pack-* --filter=web-1 --filter=service-1", "dev:web-2": "turbo run dev --filter=pack-* --filter=web-2 --filter=service-1 --filter=service-2", "dev:web-3": "turbo run dev --filter=pack-* --filter=web-3 --filter=service-3" } }
--filter=pack-*:强制触发所有packages的dev任务,保证代码加载--filter=web-X:启动指定的Next.js项目--filter=service-Y:只启动你需要的1-2个Express服务
方法二:纯Yarn Workspaces + Concurrently
如果不用Turbo,直接用Yarn自带的工作区功能,搭配concurrently实现多命令并行:
- 先安装依赖:
yarn add -D concurrently
- 在根
package.json里配置脚本:
{ "scripts": { "dev:all-packages": "yarn workspace pack-1 dev & yarn workspace pack-2 dev & yarn workspace pack-3 dev", "dev:web-1": "concurrently \"yarn dev:all-packages\" \"yarn workspace web-1 dev\" \"yarn workspace service-1 dev\"", "dev:web-2": "concurrently \"yarn dev:all-packages\" \"yarn workspace web-2 dev\" \"yarn workspace service-1 dev\" \"yarn workspace service-2 dev\"", "dev:web-3": "concurrently \"yarn dev:all-packages\" \"yarn workspace web-3 dev\" \"yarn workspace service-3 dev\"" } }
这样执行对应命令时,会先启动所有packages的开发服务,再启动指定的web项目和服务,不会启动全部services,也不用调整concurrency参数。
内容的提问来源于stack exchange,提问作者Pastilhas
相关产品推荐
相关产品推荐

