在依赖里面记录的包的版本号里面,可能会有一些特别的符号,比如 ^ 或者 ~ 。这个 ^ 表示可以使用版本号里后两位更新的包,也就是小版本还有补丁版本的更新。 ~ 的意思是只能使用补丁版本的更新。如果在版本号里没有特别的符号,就会使用指定版本的包。
比如之前我们在项目里安装了一个叫 express 的包,在 package.json 这个文件里,记录了一下。这个包的版本号是 4.17.0,这是我们在安装的时候指定要安装的一个版本。
这个版本号最前面用了一个 ^ 符号,这样以后如果这个包有小版本或者补丁版本的更新,在用 npm 更新这个包的时候,就会使用这个包的小版本或者补丁版本的更新。
把这个符号换成 ~ ,npm 就只会更新这个包的补丁版本。下面可以试一下,先恢复一下 package.json 还有 package-lock.json 这两个文件。 然后再把 node_modules 删除掉。
在命令行,重新安装一下 express 这个包,设置一下要安装的版本,比如 4.16.0 。 完成以后再回到项目,打开 package.json,你会发现,安装的是 4.16.0 这个版本的 express。
打开 package-lock.json ,搜索一下 express,实际安装的也是 4.16.0 这个版本的 express。
下面可以修改一下 package.json 里的这个 express 包的版本号,把上箭头换成波浪号。这样就只会使用这个包的补丁版本的更新。
在命令行,用 npm update 命令,更新一下 experss ,执行一下这个命令。然后回到项目,你会发现这个 express 的版本号变成了 4.16.4,npm 并没有下载比这个更新版本的 express,比如 4.17.x,因为之前设置的这个版本号里面,用的是波浪号。
在 package-lock.json 文件里检查一下 express 这个包的详细情况,显示项目里现在用的是 4.16.4 这个版本的 express。
更新之后,npm 把 ~ 号换成了 ^,这样下次更新这个包的时候,可以使用这个包的小版本或者补丁版本更新。
回到命令行,重新执行一下 npm update express,完成以后,回到项目,你会发现,这个包的版本号变成了 4.17.1。
在 package-lock.json 文件里再检查一下 express, 显示当前项目使用的是 4.17.1 这个版本的 express 。