如何在Lerna monorepo项目中使用npm link关联外部开发依赖?
Lerna Monorepo 中使用 npm link 开发外部依赖的可行方案
核心操作方案(推荐)
基于lerna exec执行link命令,自动适配monorepo内部私有包的识别逻辑,避免触发公共registry查询报错:
- 先在本地
cool-components项目的根目录执行命令,将本地包注册到npm全局缓存:
npm link
- 回到你的Lerna项目根目录,执行指定scope的link命令,将全局缓存的cool-components关联到client包:
lerna exec --scope @my-project/client -- npm link cool-components
- 取消关联的操作同样在Lerna根目录执行:
# 先解除client包的本地关联 lerna exec --scope @my-project/client -- npm unlink cool-components # 再进入本地cool-components项目根目录,清除全局缓存的软链 npm unlink -g cool-components
- 如需恢复使用npm registry上的官方版本,在Lerna根目录执行以下命令重写依赖即可:
lerna bootstrap --force-local
备选方案(适配npm7+ workspaces环境)
如果你的Lerna版本基于npm原生workspaces实现,可以直接在Lerna根目录通过文件路径直接关联本地包,不需要全局注册:
npm install ../../本地cool-components的相对路径 --workspace @my-project/client
取消关联时直接删除client包package.json里对应依赖的file前缀配置,重新执行lerna bootstrap即可。
注意事项
- 每次执行link/unlink操作后需要重启client的开发服务,避免缓存导致代码不更新
- 所有涉及依赖变更的操作都不要在子包目录单独执行,统一走Lerna根目录的命令,避免触发内部私有包的registry查询校验
内容的提问来源于stack exchange,提问作者Itay Ganor
相关产品推荐
相关产品推荐

