npm仅指定主版本号(如@angular/core设为"10")的匹配规则及安装版本解析
npm依赖中仅写主版本号的解析规则
你写的"@angular/core": "10"这类仅指定主版本的写法,不会被npm严格锁定为10.0.0版本,实际安装的是整个10大版本区间内的最新可用版本。
结合你已经了解的npm版本匹配规则,可以把不同写法的匹配范围对应起来对照,逻辑就非常清晰了:
- 严格写完整三段版本号,比如
"10.2.5":不带任何范围修饰,npm会100%安装指定的精确版本,没有任何浮动空间 - 仅写单个主版本号,比如
"10":npm会自动将其解析为>=10.0.0 <11.0.0的版本区间,允许安装所有10系列的次版本、补丁版本更新 - 带
^前缀的版本写法,比如"^10.0.0":你已经知道它的匹配范围是到主版本级别,也就是不跨主版本、允许跨次版本和补丁版本更新,它的实际覆盖范围和仅写主版本号"10"是完全一致的 - 带
~前缀的版本写法,比如"~10.0.0":你也知道它的匹配范围到补丁版本级别,也就是不跨次版本、只允许同次版本下的补丁更新,范围比前两种写法窄很多
给出的依赖配置的实际安装效果
你贴出的这段dependencies配置里,所有指定为"10"的@angular相关包,在执行npm install时,都会拉取对应包在10.x大版本下的最新稳定版。比如@angular/core最终可能安装到10.2.5,而不是10系列刚发布时的初始版本10.0.0——只要是小于11.0.0的10系列版本,都在这个写法的匹配范围内。
如果需要固定某个大版本下的特定小版本、避免自动拉取最新的子版本,只需要写完整的三段版本号(比如"10.2.5"),不要只写主版本号即可。
内容的提问来源于stack exchange,提问作者Dipak Telangre
相关产品推荐
相关产品推荐

