如何在Lerna Monorepo中正确创建指定版本的新包?
Lerna Monorepo 添加新依赖包的版本与CI问题解决方案
1. 修复lerna bootstrap未处理新包的问题
先检查两个关键配置:
- 确认
lerna.json中的packages字段覆盖了新包路径,示例配置:{ "packages": ["packages/*"], "version": "0.34.0" } - 新包
packages/main/package.json必须包含必填字段:name(建议带组织 scope,比如@your-org/main)、version(先临时设为0.34.0)、main入口等。
之后在根目录执行npx lerna bootstrap,Lerna会自动识别所有packages下的包并处理本地链接。如果要给panel包添加main包的依赖,更高效的方式是用lerna add命令:
# 在根目录执行,指定给panel包添加main包依赖 npx lerna add @your-org/main --scope=@your-org/panel
这个命令会自动更新panel包的package.json,同时建立本地符号链接。
2. 给新包设置0.34.0版本的正确方式
不要单独在packages/main目录执行lerna publish,Lerna是全局管理monorepo版本的。直接在根目录执行以下命令,强制将main包版本设为0.34.0,不改动其他包:
npx lerna version 0.34.0 --force-publish=main
如果不想自动提交Git标签,可以加上--no-git-tag-version参数先预览版本修改,确认无误后再提交。
3. CI环境找不到新包的解决方案
本地符号链接正常但CI失败,核心是没配置好monorepo的工作区机制,不需要必须发布包:
- 在根目录
package.json中添加Yarn Workspaces配置:{ "workspaces": ["packages/*"] } - 同时在
lerna.json中开启Workspaces支持:{ "useWorkspaces": true, "packages": ["packages/*"], "version": "0.34.0" }
这样CI执行yarn install时,会自动识别packages下的所有本地包作为工作区依赖,不需要发布到npm就能正常引用。
总结
不需要将整个monorepo升级到0.34.1,也无需强制发布新包。按上述步骤配置后,新包可以保持0.34.0版本,CI也能正常处理本地依赖。
内容的提问来源于stack exchange,提问作者Dave Stein
相关产品推荐
相关产品推荐

