Lerna+NPM项目移除localPeerDependencies依赖报错咨询
问题解答
1. 这是Lerna还是npm的问题?
这本质是npm不识别localPeerDependencies这个自定义字段导致的问题。
localPeerDependencies不是npm原生支持的配置项,它是Lerna生态里的自定义扩展字段(用于管理本地包的peer依赖关系)。当你执行npm remove或npm prune时,npm会把这个字段里的包当成普通的公开npm包去远程仓库查找版本,但aux-package是你本地的私有包,远程仓库根本没有0.0.0-0这个版本,所以触发了ETARGET错误。Lerna本身没有为这个字段提供对应的npm命令兼容处理,用npm原生命令操作它必然会失败。
2. 2023年移除localPeerDependencies中包的正确方式
因为localPeerDependencies是Lerna的自定义配置,没有对应的npm/Lerna命令可以直接移除,正确的操作步骤是:
- 手动编辑
main-package/package.json,删除localPeerDependencies对象里的"aux-package": "0.0.0-0"条目。 - 如果
aux-package同时存在于main-package的dependencies、devDependencies或原生peerDependencies字段中,再执行npm remove aux-package(在main-package目录下)或者lerna exec --scope main-package -- npm remove aux-package(根目录执行)来移除这些原生依赖项。 - 最后在项目根目录运行
lerna bootstrap,让Lerna重新同步所有本地包的依赖关系,确保配置变更生效。
内容的提问来源于stack exchange,提问作者lastoneisbearfood
相关产品推荐
相关产品推荐

