如果你在在安装新packages,并更新package.json作为副作用。仔细观察,您会发现版本号前面有一些特殊符号。

"dependencies": {
    "lodash": "^3.9.2"
}

语义版本控制介绍

前缀字符(^)与称为语义版本化或semver的版本编号方案有关。 语义版本控制指示哪种更改会导致版本号增加。 Semver使用由三部分组成的版本号,例如3.9.2,并将这三个数字从左到右分别称为主要,次要和补丁号。

3.9.2
majorminorpatch

在没有node_modules的情况下以全新检出方式执行npm install时,npm将下载并安装一个满足每个依赖项package.json的版本。 通过使用npm而不是在package.json中指定要安装的确切版本,可以扩大接受版本的范围。 您可以使用波浪号(~)允许更新的补丁程序级别,而使用插入号(^)允许更新的次要或补丁程序级别

SymbolDependencyVersionsChanges
caret (^)^3.9.23.*.*
  • backwards compatible new functionality
  • old functionality deprecated, but operational
  • large internal refactor
  • bug fix
tilde (~)~3.9.23.9.*
  • bug fix

使用npm更新模块

npm update

在package.json中有一个专用的命令npm update用于检查和安装满足semver模式的较新版本。

npm install lodash@latest

或者,如果您想将某个软件包更新为最新版本而忽略语义版本控制范围,则可以使用带有@latest标记的install。

配置npm默认值

npm中的默认行为是在更新package.json时使用插入符号(^)。可以使用以下方式配置此默认行为

npm config set save-prefix '~'

您也可以使用--save-exact标志来通知npm需要精确匹配,而不是默认的保存前缀。您可以使用npm config set save-exact true将后一个选项设置为默认值。

Semver explained – why is there a caret (^) in my package.json?