NPM - 如何安装新软件包而不更新或添加package.json中描述的软件包

30

这是一个困难的问题,我会尽力解释。

如何在不安装依赖项或新包(定义在package/-lock.json中)的情况下添加新包?

例如:目前,我们有package.json和package-lock.json来维护版本控制。

然而,如果我们尝试添加一个新的包,其他与package.json或package-lock.json相关的包也将被更新/添加。

本意是只需添加新包,在package.json和package-lock.json中添加这些包的信息,而不影响当前安装的包。


你是否担心模块版本会发生变化?如果是这样,你可以在 package.json 中为每个模块指定一个版本,它们就不会更新到超过该版本。 - dodo
已经在 package.json 中安装并描述的所有软件包已经被指定。 - Dan
如果你已经安装了所有需要的包并指定了它们的版本号,那么在执行npm install命令时它们不会发生变化。 - dodo
@dodo 我也是这么想的。 - Dan
2个回答

20

如果您不希望任何一个软件包自动更新,请前往package.json并进行一些更改。

例如,将"react-native": "^0.56.1"更改为"react-native": "0.56.1"

只需删除版本声明之前看到的caret(“^”)或tilde(“~”)符号即可。

  • Caret(“^”)符号使npm能够更新次要版本更新(例如从56到57或更高版本),而
  • Tilde(“~”)符号使npm能够更新修补程序版本更新([major、minor、patch]元组中最右边的元素)。

如果您声明软件包版本而没有任何符号,则它们不会被更新。


不幸的是,Babel的package.json文件并没有遵循这一点,因此即使您尝试锁定使用的软件包,它的所有依赖关系也具有广泛的semver模式,试图获取最新版本。NYC是一个相当常见的工具,它使用babel,因此即使您没有明确使用它,您仍可能陷入他们的痛苦世界。 - Jason
我不知道这个。谢谢你教我。我会尝试复现它并找到解决方案,一旦我找到了,我会更新这个答案。 - Amir Gorji
1
根据npm install doc的说明,你可以使用-E--save-exact来选择不使用语义版本范围运算符。 - undefined

2

使用npm ci代替npm install

来自文档

它永远不会写入package.json或任何包锁定文件:安装基本上是冻结的。

还有其他注意事项和差异,建议阅读文档以获取更多详细信息。例如,它将删除现有的node_module目录。


1
npm ci 不会安装新的包。 - trusktr
2
@trusktr npm ci 实际上按照文档安装软件包: "此命令类似于 npm install,但它旨在用于自动化环境,如测试平台、持续集成和部署"。 - Chirag Anand

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