Semver 版本控制 - 使用插入符号"^"更新包



我的package.json文件中有一个npm包

"clean-webpack-plugin": "^0.1.18"

现在,当我将鼠标悬停在软件包上时,我可以看到有一个更新的版本

"clean-webpack-plugin": "^0.1.19"

现在,据我了解,例如,我可以npm update更新所有遵守semver规则的软件包,或者只更新软件包npm update clean-webpack-plugin

因此,插入符号^符号应该意味着,如果可用,您可以将包更新到版本0.9.9,对吧?

npm update没有效果,这就是我问的原因。

我很确定 npm 会在您运行后将clean-webpack-plugin的应用程序文件从版本0.1.18更新到版本0.1.19npm update clean-webpack-plugin如您的问题中所述。

但是,npm 不会更新package.json中的条目,因为理论上实际上没有必要这样做。为什么?。。因为版本"^0.1.18"是在package.json中指定的。即版本用插入符号^符号指定。

假设您要使用package.json中指定的^0.1.18发布您的项目,那么任何运行npm install的后续用户实际上都会获得版本0.1.19(警告:因为clean-webpack-plugin的版本历史记录目前位于 npm 存储库中在撰写本文时)。

因此,简而言之,我很确定您的系统上已安装了版本0.1.19,它根本没有更改package.json中指定的版本。实际上没有必要这样做,并且semver的规则和插入符号的使用仍然受到尊重。

因此,插入符号^符号应该意味着,如果可用,您可以将包更新到版本0.9.9,对吗?

"^0.1.18"中的插入符号对 npm 说我将接受对最新次要版本的任何更新,但我不会接受主要更新。 即^0.1.18表示范围内的任何更新>=0.1.18 <1.0.0(也允许在该范围内进行 PATCH 更新)。


验证它是否已更新:

要验证是否已实际安装版本0.1.19,您可以cd到项目目录并运行:

npm ls clean-webpack-plugin

您应该会看到以下内容记录到您的控制台:

...
└── clean-webpack-plugin@0.1.19

但我想package.json在运行npm update后显示"^0.1.19"

最初运行npm update clean-webpack-plugin时,您可能有:

  1. 附加了--save-dev参数(如果它列在package.jsondevDependencies部分中,则适用)。
  2. 或者,附加--save参数(如果它列在package.jsondependencies部分中,则适用)。

根据需要将--save-dev--save附加到npm update clean-webpack-plugin将更新package.json中的条目。npm 文档的录制文件更新--save部分对此进行了进一步说明。

通过执行此操作,您可以将其视为重新指定要接受的更新范围的初始>=部分。


注意

如果npm ls clean-webpack-plugin报告,则使用附加--save--save-dev参数运行npm update clean-webpack-plugin不会产生任何影响:

...
└── clean-webpack-plugin@0.1.19

没有什么可更新的,所以我只是在package.json中手动指定"^0.1.19"

最新更新