基于yarn workspaces和lerna的monorepo中Github Actions找不到私有包如何解决
问题根因
该报错核心原因是CI环境中DTO包未提前构建,导致依赖它的服务端包编译时无法找到对应模块。
本地执行正常是因为你之前大概率已经在本地执行过build命令,DTO包的dist目录下存在编译后的产物。而Github Actions运行环境是全新初始化的,拉取代码后DTO包的dist目录为空,直接执行deploy命令不会触发DTO包的构建逻辑。
只有第一个serverless包执行成功是因为lerna默认按包名字母排序执行任务,且默认开启并行执行,第一个包刚好命中了前置流程的缓存,或是刚好在执行时私有npm源上已有对应版本的DTO包。
解决方案
- 新增全量构建步骤
在Deploy-to-AWSJob的安装依赖步骤后,新增全量包构建步骤,保证DTO包优先完成构建:
- name: Build all packages run: yarn build
根目录的yarn build会触发lerna按照依赖拓扑顺序执行所有包的build脚本,自动优先构建DTO包,再构建所有依赖它的子包,确保子包编译时能拿到DTO的编译产物。
2. (可选)调整lerna执行规则
如果并行部署serverless包仍然出现异常,可以修改根目录package.json的deploy脚本,强制lerna按依赖顺序串行执行,避免并行冲突:
"deploy": "lerna run deploy --sort --concurrency 1"
- 检查DTO包配置
确认DTO包的package.json中入口和类型声明配置正确,指向dist目录下的对应文件:
{ "main": "dist/index.js", "types": "dist/index.d.ts", "files": ["dist"] }
内容的提问来源于stack exchange,提问作者mecograph
相关产品推荐
相关产品推荐

