如何将Turborepo管理的Monorepo中单个API包部署到DigitalOcean?
解决Turborepo Monorepo中单个API包部署到DigitalOcean的锁文件问题
我之前也碰到过一模一样的情况——DigitalOcean的部署工具默认会在你指定的部署目录下找package-lock.json或yarn.lock,但Turborepo作为Monorepo工具,只会在根目录生成统一的锁文件,这就导致单独部署packages/api目录时直接触发锁文件缺失的错误。这里有两个实用的解决方案:
方案一:以Monorepo根目录作为部署上下文(推荐)
这个方法能保留Turborepo的工作区优势,步骤很简单:
- 在DigitalOcean的部署配置里,把部署上下文目录设置为你的Monorepo根目录(别选
packages/api) - 设置构建命令为Turborepo专门针对api包的构建指令:
yarn build --filter=api - 设置启动命令为进入api包目录并启动服务:
cd packages/api && yarn start
这样平台会自动找到根目录的yarn.lock,完成依赖安装后只构建api包,最后正常启动服务。
方案二:为单个API包生成独立锁文件
如果因为某些限制必须单独部署packages/api目录,可以用Yarn的工作区命令生成该包的专属锁文件:
- 回到Monorepo根目录,执行以下命令——它会在
packages/api目录生成只包含该包生产依赖的yarn.lock:yarn workspaces focus api --production - 把
packages/api目录(包括新生成的yarn.lock)作为部署目录提交到仓库,或者直接用于DigitalOcean部署
注意:这个命令需要Yarn 1.22及以上版本支持,每次api包的依赖更新后,都需要重新执行该命令生成新的锁文件。
最后可以检查下DigitalOcean部署日志里的工作目录,确认它是不是默认指向了packages/api,如果是的话,切换到根目录就能直接解决锁文件找不到的问题。
内容的提问来源于stack exchange,提问作者Agustin Garcia
相关产品推荐
相关产品推荐

