我有一个(0.61.4),它使用yarn作为其包管理器。
当我运行yarn audit时,报告了大量的漏洞:
18202 vulnerabilities found - Packages audited: 958823
Severity: 18202 High
✨ Done in 14.34s.大多数都处于一些非常深的依赖路径中。例如:
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.12 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ react-native │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ react-native > @react-native-community/cli > │
│ │ metro-react-native-babel-transformer > @babel/core > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://www.npmjs.com/advisories/1065 │
└───────────────┴──────────────────────────────────────────────────────────────┘当我运行npm audit时,它首先报告:
Neither npm-shrinkwrap.json nor package-lock.json found: Cannot audit a project without a lockfile所以我跑了:
npm i --package-lock-only生成一个package-lock.json文件。经过检查,这份文件似乎是正确的。
当我现在运行npm audit时,结果是:
=== npm audit security report ===
found 0 vulnerabilities我不明白这两个包经理之间的差异。为什么npm报告0错误和yarn 18.202?
发布于 2020-02-05 09:46:38
如果不查看锁文件并进行比较,很难估计为什么会发生这种情况。但是,据我所知,只有当两个锁文件解析为同一依赖项的不同版本时,才会发生这种情况。
您的yarn.lock文件是早些时候生成的,因此它包含了易受攻击的和旧版本的依赖项,而且由于package-lock.json是在之后生成的,所以它将解析为这些依赖项的最新/固定版本。
请记住,npm i --package-lock-only只是创建包-lock.json文件,而不是安装任何东西,但是它不会与实际安装的包相同。我认为您假设运行该命令只会从已安装的包中派生锁文件,但实际上它会生成锁文件,就好像您在没有标记的情况下运行它一样。
因此,总之,两个锁文件都解析为同一依赖项的不同版本(次要/修补程序)。
发布于 2021-08-04 14:53:12
这不是雅恩和尼姆之间的一对一的比较。确实,它们没有报告完全相同的审计警告,但如果您执行以下操作,可以从Yarn获得相同/相似的结果:
rm ./yarn.lock
yarn
yarn audit为什么会这样呢?因为Yarn使用的是以前依赖管理工作中的知识,而Npm从零开始,以前从未在您的项目中运行过。如果您删除yarn.lock,纱也将从头开始。无论哪种方式,您都将获得所有库的最新修补程序级版本,否则就不会有这些版本了。这将导致您的许多审计警告消失。
那么yarn.lock和package-lock.json又是什么呢?每次成功运行安装后,Yarn将node_modules的最新状态(依赖树)保存在yarn.lock中。NPM在package-lock.json中也是如此。这两个自动生成的文件类似于您的package.json的详细版本,列出了您安装的每个依赖项和子依赖项(版本号降到x.x.x修补程序级别)以及它们安装的原因。这样,您的node_modules在每次运行yarn install或npm install时都会看起来完全相同。
但是,这两个锁文件是由相应的包管理器独占使用的,并且不兼容:如果您交替使用这两个锁文件,则纱线和Npm可能会不断地更改您的node_modules。这将导致许多微妙的错误。这就是为什么你通常应该坚持在一个项目中使用Yarn或Npm。
https://stackoverflow.com/questions/58518471
复制相似问题