“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”到底是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章