Angular中能否用package-lock.json锁定嵌套依赖C的版本至2.0.10?
当前环境信息
- Angular CLI: 11.0.3
- Angular: 11.0.9
- Node: 14.20.1
- Ivy Workspace: 是
问题解答
可以通过修改package-lock.json实现将嵌套依赖包C锁定为2.0.10版本,但这种方式属于临时方案,不推荐作为长期解决办法——后续执行npm install、npm update等命令时,npm可能会根据包B的依赖声明(^2.0.12)重新计算并覆盖你修改的版本。
更可靠的解决方案
根据你的npm版本,推荐以下两种可持续的方式:
npm 8.3+版本(推荐)
在项目根目录的package.json中添加overrides字段,强制指定包B依赖的包C版本:{ "overrides": { "包B": { "包C": "2.0.10" } } }添加完成后执行
npm install,npm会自动更新package-lock.json,将包B依赖的包C锁定为2.0.10版本。npm 8.3以下版本(如你当前Node 14对应的npm 6.x)
需要借助npm-force-resolutions工具来实现版本锁定:- 首先安装工具作为开发依赖:
npm install --save-dev npm-force-resolutions - 在
package.json中添加resolutions字段和preinstall脚本:{ "resolutions": { "包B/包C": "2.0.10" }, "scripts": { "preinstall": "npx npm-force-resolutions" } } - 执行
npm install,工具会自动修改package-lock.json,强制将包B依赖的包C版本设置为2.0.10。
- 首先安装工具作为开发依赖:
临时修改package-lock.json的步骤(不推荐)
如果你只是临时需要锁定版本,可以按以下操作:
- 打开
package-lock.json,找到包B依赖树中包C的条目,将version字段修改为2.0.10,同时更新对应的resolved和integrity值(可从npm官网查询2.0.10版本的哈希值)。 - 修改完成后执行
npm ci(不要用npm install,避免npm重新计算依赖),确保项目安装的是指定版本的包C。
内容的提问来源于stack exchange,提问作者Fred2020
相关产品推荐
相关产品推荐

