Angular依赖包声明12.2.9安装后变为12.2.13原因问询
版本不符的核心原因
你在package.json中给版本号添加的^(插入符号)触发了npm的语义化版本兼容规则:
^12.2.9的含义不是固定安装12.2.9版本,而是允许安装主版本号(第一位版本号12)不变的所有最新稳定兼容版本。当前Angular 12大版本下的最新修订版本为12.2.13,符合^12.2.9的范围要求,因此npm安装了该版本。- 你删除了
package-lock.json也是触发拉取最新版本的诱因:package-lock.json会记录上一次安装所有依赖的实际版本,只要文件存在且未修改依赖版本范围,npm install会优先沿用锁定的版本,不会自动升级。
版本规则的定义
这套版本解析规则是npm内置的语义化版本(semver)规范,你可以通过npm配置修改默认的版本前缀规则:
- 执行
npm config set save-prefix='':后续npm install --save安装包时默认不带版本前缀,固定写死安装版本 - 执行
npm config set save-prefix='~':后续安装的包默认添加~前缀,仅允许安装次版本号(第二位版本号)不变的最新兼容版本,比如~12.2.9只会安装>=12.2.9且<12.3.0的版本
修复方案
如果需要严格固定安装12.2.9版本,直接去掉所有Angular相关包版本号前的^即可,示例如下:
"@angular/animations": "12.2.9", "@angular/cdk": "12.2.9", "@angular/common": "12.2.9", "@angular/compiler": "12.2.9", "@angular/core": "12.2.9", ...
修改后重新删除node_modules和package-lock.json,执行npm install即可安装指定的12.2.9版本。
内容的提问来源于stack exchange,提问作者Konrad
相关产品推荐
相关产品推荐

