Npm install 忽略版本号中的波浪号 (~)

Ite*_*tor 3 node.js npm node-modules npm-install

我想安装 1.8.x 版本的包,并且能够稍后在 >=1.8.0 <1.9.0 范围内自动更新此依赖项。

我试图运行这个命令:

npm install example-package@~1.8 --save
Run Code Online (Sandbox Code Playgroud)

不幸的是,它将此记录添加到我的package.json

"example-package" : "^1.8.0"
Run Code Online (Sandbox Code Playgroud)

但我想要的是这个:

"example-package" : "~1.8.0"
Run Code Online (Sandbox Code Playgroud)

如何在npm install不手动编辑package.json文件的情况下使用 来做到这一点?

Rob*_*obC 9

semver 前缀由save-prefix配置定义。默认值是一个插入符号 ( ^),您可以通过运行以下npm config命令来检查它:

npm config get save-prefix
Run Code Online (Sandbox Code Playgroud)

不幸的是,该npm install命令没有选项来指定这一点,所以你需要做的是:

  1. 通过运行将save-prefix值设置为波浪号 ( ~):

    npm config set save-prefix="~"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过运行安装你的包:

    npm i example-package@1.8.0 --save
    
    Run Code Online (Sandbox Code Playgroud)

    注意:~安装命令中不得包含波浪号 ( )。

  3. 最后,通过运行将save-prefix值设置回它的默认值,即插入符号 ( ^):

    npm config delete save-prefix
    
    Run Code Online (Sandbox Code Playgroud)

    注意:如果您希望所有 futurenpm install都使用波浪号 ( ~) 前缀而不是插入符号 ( ^),那么您就不会执行最后一步。

上述步骤将在 中添加以下记录package.json

"example-package" : "~1.8.0"
Run Code Online (Sandbox Code Playgroud)

注意波浪号~而不是默认的插入符号^


您可以使用&&运算符将上述命令组合成一个复合命令。例如:

npm config set save-prefix="~" && npm i example-package@1.8.0 --save && npm config delete save-prefix
Run Code Online (Sandbox Code Playgroud)