“npm 审计修复”究竟是做什么的?

Sam*_*mpo 26 npm package.json npm-audit

npm audit fix旨在自动升级/修复 npm 包中的漏洞。但是,我还没有发现它究竟做了什么来修复这些漏洞。

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

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

Noa*_*May 20

从 NPM网站上的审计命令

npm audit fixnpm install在引擎盖下运行一个成熟的

默认情况下,审计修复似乎只进行与 semvar 兼容的升级。在文档前面列出:

有审计修复安装 semver-major 对顶级依赖项的更新,而不仅仅是与 semver 兼容的:

$ npm audit fix --force
Run Code Online (Sandbox Code Playgroud)

至于锁定文件,每次运行更改package.json. 此处的答案以及官方文档中提供了有关此内容的更多信息。

  • 由于“npmauditfix”运行“npminstall”,我认为它会更新子依赖项(除非npminstall也不更新)。不过我不知道。好久没关注nodejs了。 (4认同)
  • 大多数时候不这样做。运行审核修复将更新一些包,但不会更新所有依赖项,这可能会导致运行时错误。 (2认同)

Car*_*cia 18

在我的理解中,不仅是“升级”,有时还会降级,以便安装解决问题的稳定版本,有时这些问题出现在较新的版本中,可能引入了错误或根本与以前的包的 API 等不匹配。

例如,在我的例子中,npm install 已将反应脚本升级到 5.0.0,但存在一些问题,运行后:

npm audit fix --force
Run Code Online (Sandbox Code Playgroud)

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

它安装了 3.0.1,并显示以下消息:

npm WARN audit Updating react-scripts to 3.0.1,which is a SemVer major change.
Run Code Online (Sandbox Code Playgroud)

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

最重要的是,虽然文档声明“正在后台运行 npm install”,但并不是安装最新版本的依赖项,但对于检查 npm ci 发生的情况也很有用,“npm install”和“ npm install”之间有什么区别“npm ci”?