使`npm install --save`添加一个严格的版本到package.json


76

运行时npm install --save somepackage,通常会在package.json中添加以下内容:

"dependencies": {
    "somepackage": "^2.1.0"
}

因为该版本前面带有脱字符号(^),所以这意味着如果您稍后运行npm install,它可能会安装2.3.0版。由于相当明显的原因,这可能是不希望的。npm shrinkwrap是有用的,但并不能真正解决问题。

因此,我有几个问题:

  1. 安装软件包时,是否可以在package.json中指定将其设置为特定版本(版本号前无需插入符号)?
  2. 将软件包发布到npm时,是否有其他方法可以防止其他开发人员安装软件包时在版本之前包含插入号的默认设置?

Answers:


119

要默认指定确切版本,可以使用以下命令更改npm配置save-exact

npm config set save-exact true

您还可以使用代字号指定前置版本save-prefix

而且,不,您不能强迫用户更新到次要版本或补丁程序版本,NPM使用semver,这是发布软件包的推荐方法。


24
如果只想对特定的软件包执行此操作,则可以添加--save-exact到命令行。例如npm install --save --save-exact somepackage
gilly3 '16

1
这只会保存您的确切版本top level packges-在中指定的版本package.json,但不适用于top level packages所依赖的任何软件包。yarnpkg.com解决了yarn.lock文件问题,因此您始终拥有所有软件包的确切版本。
kuncevic.dev

10

您可以使用该--save-exact选项更改默认行为。

// npm
npm install --save --save-exact react

// yarn
yarn add --exact react

如果将来有人需要,我就创建了一个关于此的博客文章。

https://www.dalejefferson.com/blog/how-to-save-exact-npm-package-versions/


1
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。此外,在这种情况下,请不要说“我已经在博客文章中解释了代码”,而是在此处包括大部分内容,并且仅将链接用作参考
Filnor

感谢Chade的反馈,我添加了更多细节。
戴尔·杰斐逊

3

跑:

npm install --save --save-exact my-module@my-specific-version

添加答案以使该建议更容易理解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.