解决package-lock.json中漏洞的最佳方法?

时间:2019-01-01 12:48:32

标签: javascript node.js security package-lock.json

我被警告关于Node.Js项目的package-lock.json文件中列出的程序包中的漏洞。

我可以遵循advice here并使用npm install <package-name>重新安装所有软件包,但是,我还使用了其他npm项目,这些项目使用这些软件包的较旧版本,而不会通过简单的{重新安装{1}}。

这是否意味着我必须去npm install并手动将所有依赖项更改为最新版本?

如果他们摔坏了怎么办?

没有适当的更新方式来确保您不会破坏依赖于旧版本的其他软件包吗?

1 个答案:

答案 0 :(得分:1)

如果问题出在您直接依赖的软件包上,则应直接进行更新并将其版本保存到package.json中,并通过执行类似{{1 }}。但是要当心:可能会有一些重大更改会破坏您的代码(例如,如果依赖项之间有一个主要版本更新,其中包括一些弃用和重大更改)。

但是,如果问题是来自您的一个依赖关系中的一个依赖关系,那么解决该问题的最好方法是向父程序包的维护者提出一个问题(可能是通过PR来帮助他们)。提供更新,更新项目中的依赖项本身。

您也可以使用package-lock.json解决一些问题(可能不是全部,并且如果依赖项明确要求使用子依赖项版本,则它不会更新,因为它可能会破坏某些东西),但是为您和其他所有人解决此问题的最佳方法是,在可能的情况下(如果可能)获取要更新其依赖项的模块的维护者。

如果依存关系仍然很脆弱,则重新安装一切都无法解决问题。安装并不能神奇地修复某些东西,人们可以:-)但是,您可能想做的是使用npm install your-dependency@latest --save[-dev]列出所有具有较新版本的软件包,然后尝试逐个更新它们,看看是否之后,您的漏洞就会得到解决(npm audit)。

另一件事:在npm outdated中手动更改内容通常是一个不好的做法。此文件应仅由您的npm audit(或类似)脚本之一自动生成。这个文件是npm用来解析全新安装中确切的依赖项/子依赖项版本列表的文件,它实际上是确保所有使用或从事此项目的人都具有完全相同版本的最佳方法。他们的依赖关系,所以最好是正确的。始终提交您的package-lock.json