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

Posted

技术标签:

【中文标题】npm - Semver 版本控制 - 使用插入符号“^”更新包【英文标题】:npm - Semver versioning - Updating a package with a caret "^" 【发布时间】:2018-08-22 13:42:45 【问题描述】:

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

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

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

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

现在,据我所知,我可以执行 npm update 来更新所有遵守 semver 规则的包,或者只更新包 npm update clean-webpack-plugin

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

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

【问题讨论】:

【参考方案1】:

我很确定 npm 会在你运行后更新 clean-webpack-plugin 的应用程序文件 from version 0.1.18 to version 0.1.19 @987654326 @如您的问题中所述。

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

假设您要使用在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 说,我将接受对最新 MINOR 版本的任何更新,但我不会接受重大更新。 IE。 ^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 时,您可以:

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

--save-dev--save 附加到npm update clean-webpack-plugin 将更新package.json 中的条目。这在 npm 文档的Recording Updates with --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"

【讨论】:

非常有用的答案,感谢详细的解释!

以上是关于npm - Semver 版本控制 - 使用插入符号“^”更新包的主要内容,如果未能解决你的问题,请参考以下文章

npm 中的 4 位版本控制

vue - check-versions.js for semver

npm 是不是支持 semver 中较新的预发布版本?

如何在忽略 semver 的情况下安装 NPM 包?

NPM 是不是默认安装最新的 SEMVER 或最后发布的?

由于以下错误,无法运行任何 npm 命令 - 错误:找不到模块“semver”