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

Posted

技术标签:

【中文标题】使 `npm install --save` 为 package.json 添加一个严格的版本【英文标题】:Make `npm install --save` add a strict version to package.json 【发布时间】:2015-08-19 19:02:52 【问题描述】:

当你运行npm install --save somepackage 时,它通常会在 package.json 中添加类似这样的内容:

"dependencies": 
    "somepackage": "^2.1.0"

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

所以,我有几个问题:

    安装包时,是否可以在 package.json 中指定您希望将其设置为特定版本(版本号前没有插入符号)? 在将包发布到 npm 时,有什么方法可以防止在其他开发者安装你的包时默认在版本之前包含插入符号?

【问题讨论】:

【参考方案1】:

要默认指定确切的版本,您可以使用 save-exact 更改您的 npm 配置:

npm config set save-exact true

您还可以使用save-prefix 指定带有波浪号的前置版本。

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

【讨论】:

如果您只想对特定的包执行此操作,您可以在命令行中添加--save-exact。例如,npm install --save --save-exact somepackage 这只是保存top level packges 的确切版本——package.json 中指定的版本,但不适用于top level packages 所依赖的任何包。 yarnpkg.com 使用 yarn.lock 文件解决该问题,因此您始终拥有所有软件包的准确版本。 这应该是默认行为【参考方案2】:

您可以使用--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/

【讨论】:

虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。此外,在您的情况下,不要说“我已经在我的博文中解释了代码”,而是在此处包含大部分内容,并且仅将链接用作参考 感谢Chade的反馈,我已经添加了更多细节。 博客现在是 404【参考方案3】:

运行:

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

添加答案以使this advice 更易于查看。

【讨论】:

以上是关于使 `npm install --save` 为 package.json 添加一个严格的版本的主要内容,如果未能解决你的问题,请参考以下文章

npm install 的 --save 选项是什么?

npm install --save 与 npm install --save-dev 的区别

npm install -save 和npm install -save-dev 给你好看

npm install --save 与 npm install --save-dev 的区别

npm init,npm -y, npm install --save,npm install --save-dev

npm install --save 与 npm install --save-dev 的区别