一、问题现象
如package.json
中配置的是"test": "^1.0.0"
,结果下载的test组件版本却是最新版本1.2.0
二、问题原因
范围版本符号:如 ^1.2.3
允许安装与之兼容的任何版本,~1.2.3
则允许安装兼容小版本的更新
三、问题解决
去掉^符号,相当于指定版本安装
四、历史npm install不受影响原因
npm cache
中已有1.0.0版本的缓存- 与其他组件库存在依赖关系,已指定对应版本
五、涉及npm原理
npm cache
npm cache
是 npm
包管理器的一个内置缓存系统,用于存储和管理从 registry(npm 官方仓库)下载的软件包, 下载过一次之后就会存在缓存, 方便下次安装相同软件包时提升install效率
npm install 机制
核心步骤
- 先检查
package.json
中的依赖项 - 从中解析出依赖关系, 形成依赖树
- 从
npm
库中下载所需npm
包, 若已存在在本地缓存中则直接读取 - 解压所下载的内容到
node_modules
中
范围版本符号(常见用法区别)
- = 或者 不含任何符号:锁定到具体版本,例如
package-name@1.0.0
或者package-name@1.0.0
都会安装 1.0.0 版本的package-name
。 - ~:允许小版本(patch)更新,例如 ~1.2.3 会安装与 1.2.3 兼容的所有 1.2.x 版本。
- ^:允许次版本(minor)更新,例如 ^1.2.3 会安装与 1.2.3 兼容的所有 1.x.x 版本,这意味着它可以更新至 1.3.0 但不会更新到 2.0.0。