在 package.json 中指定的确切软件包版本,通过运行 npm install 命令安装。

116

目前,如果我运行npm install,它会安装已安装软件包的更新版本。如何安装与package.json文件中指定的确切版本相同的软件包?


2
你是如何在 package.json 中指定版本的?有一个修饰符可以用于固定版本。 - Sirko
2
我的错,package.json 中指定的版本是 ^version。我只是假设这就是版本号的写法。我会移除 ^ 修饰符。谢谢! - suheb
4个回答

121

15
对于npm和yarn,-E--save-exact--exact的简称。 - davnicwil
需要精确的版本号还是相同的主要版本范围就可以了? - Timo
1
有没有办法让这种行为在所有使用 npm 的安装中成为默认行为? - rmolinamir
2
是的,有:npm config set save-exact=true 或者您可以手动将 save-exact=true 添加到您的 .npmrc 文件中。 - TomRaaff

69

这种行为实际上是由 package.json 文件中指定的版本号驱动的。如果版本号看起来像 "1.0.0",没有其他符号,那么就会安装精确版本(1.0.0)。

因此,您可以简单地修改 package.json 文件,然后运行 npm install 命令。在执行此操作之前,请务必清空 node_modules 目录。

https://docs.npmjs.com/files/package.json#dependencies


7
请注意,所有子依赖项仍存在一个问题。即使您对直接依赖项指定了严格版本,也不能保证它们不会触发安装新版本的内容。 - Victor Yarema
我简直无法相信这是唯一的解决方案。对于那些创建软件包的人来说,使用尽可能低的版本进行测试非常重要。我正在考虑创建一个单独的package-min.json文件,并在CI中将其用作package.json - David Callanan

44

您还可以打开 package.json,并更改要保持不变的软件包的值。将"vue": "^2.6.10"更改为"vue": "2.6.10"。请注意版本号前面没有^符号。


0
另一种最适合我的方法
npm i --legacy-peer-deps

6
请在答案中说明为什么这个方法有效,并且与其他答案有何不同。 - phuzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接