是否在package.json中使用确切的版本号?

Jos*_*ong 6 node.js npm

对于package.json中npm依赖项的版本号,通常的做法是输入确切的版本号(例如1.2.4),而不是输入不准确的版本号(例如^1.2.4,这样可以安装bug修复版本1.2.5),以确保以后的安装不会因更改而中断依赖关系(例如,参见本文)。

使用确切的版本号有一个缺点,即您不能自动更新依赖项的错误修复版本。当它的嵌套依赖项具有安全修复程序或错误修复程序时,这是一个问题。例如,此时程序包karma-browserstack-launcher使用browserstack,它使用的版本已https-proxy-agent包含安全漏洞。这现在变得非常明显,npm audit这要归功于它在依赖项中查找安全性问题。

一段时间以来,我们有了package-lock.json,用于锁定所有依赖项的版本号。这可能会改变我们处理中确切或不准确的版本号的方式package.json

我的问题是:给定package.jsonpackage-lock.json,当今处理依赖版本号的最佳策略是什么?是否使用确切的版本?如果嵌套依赖项没有升级,我该如何处理它们的安全性问题?

Sam*_*son 2

我的感觉是

  • 作为库并供其他人使用的包应该具有不精确的版本号,并且应该指定它们工作所需的最低版本号;和
  • 不会包含在其他地方的顶级项目应该指定其需求的完整版本号,以便他们可以在更新内容时拥有最大的控制权。