“npm audit fix”到底是做啥的?

Posted

技术标签:

【中文标题】“npm audit fix”到底是做啥的?【英文标题】:What does "npm audit fix" exactly do?“npm audit fix”到底是做什么的? 【发布时间】:2020-08-08 12:27:45 【问题描述】:

npm audit fix 旨在自动升级/修复 npm 包中的漏洞。但是,我还没有找到修复这些漏洞的具体方法。

我假设npm audit fix 会将依赖项和依赖项的依赖项升级到包的 semver-definitions 允许的最新版本——实际上与rm package-lock.json; npm install 相同。但是npm audit fix在删除锁定文件+重新安装后仍然执行了很多更改。

npm audit fix 到底是做什么的?例如,它是否安装了比相应 package.json 允许的版本更新的依赖项(但仍然与 semver 兼容)?

【问题讨论】:

【参考方案1】:

来自 NPM 的site on their audit command:

npm audit fix 在后台运行一个成熟的npm install

而且审计修复似乎默认只进行与 semver 兼容的升级。文档前面列出的:

让审计修复安装 semver-major 更新到***依赖项,而不仅仅是 semver 兼容的更新:

$ npm audit fix --force

至于锁定文件,每次运行更改package.json 的命令时都会重新生成。在答案here 和official documentation 中有更多相关信息。

【讨论】:

大多数时候不要这样做。运行审计修复会更新一些包,但不会更新它们的所有依赖项,这会导致运行时错误。 由于npm audit fix 运行npm install,我认为它会更新子依赖项(除非 npm install 也不会)。不知道。好久没跟上nodejs了。【参考方案2】:

在我的理解中,不仅是“升级”,有时还包括降级以安装修复问题的稳定版本,有时这些问题出现在可能引入错误的较新版本中。

例如,在我的例子中,npm install 将 react-script 升级到 5.0.0,这有一些问题并且在运行之后:

npm audit fix --force

force 标志的作用是:要解决所有问题(包括重大更改),请运行:npm audit fix --force

它安装了 3.0.1 并带有以下消息:

npm WARN audit Updating react-scripts to 3.0.1,which is a SemVer major change.

所以它会升级到该软件包的稳定版本来解决问题。

最重要的是,虽然文档声明“正在后台运行 npm install”,但不是安装最新版本的依赖项,但也可以用于检查 npm ci What is the difference between "npm install" and "npm ci"? 发生的情况

【讨论】:

以上是关于“npm audit fix”到底是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章

“del”到底是做啥的?

selenium 中的 ime() 到底是做啥的?

DrawShadow 中的 Elevation 到底是做啥的?

.join() 方法到底是做啥的?

.join() 方法到底是做啥的?

Perl 的“祝福”到底是做啥的?