首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >npm审计与纱线审计

npm审计与纱线审计
EN

Stack Overflow用户
提问于 2019-10-23 08:19:26
回答 2查看 3.8K关注 0票数 2

我有一个(0.61.4),它使用yarn作为其包管理器。

当我运行yarn audit时,报告了大量的漏洞:

代码语言:javascript
复制
18202 vulnerabilities found - Packages audited: 958823
Severity: 18202 High
✨  Done in 14.34s.

大多数都处于一些非常深的依赖路径中。例如:

代码语言:javascript
复制
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ 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时,它首先报告:

代码语言:javascript
复制
Neither npm-shrinkwrap.json nor package-lock.json found: Cannot audit a project without a lockfile

所以我跑了:

代码语言:javascript
复制
npm i --package-lock-only

生成一个package-lock.json文件。经过检查,这份文件似乎是正确的。

当我现在运行npm audit时,结果是:

代码语言:javascript
复制
=== npm audit security report ===                        

found 0 vulnerabilities

我不明白这两个包经理之间的差异。为什么npm报告0错误和yarn 18.202?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-05 09:46:38

如果不查看锁文件并进行比较,很难估计为什么会发生这种情况。但是,据我所知,只有当两个锁文件解析为同一依赖项的不同版本时,才会发生这种情况。

您的yarn.lock文件是早些时候生成的,因此它包含了易受攻击的和旧版本的依赖项,而且由于package-lock.json是在之后生成的,所以它将解析为这些依赖项的最新/固定版本。

请记住,npm i --package-lock-only只是创建包-lock.json文件,而不是安装任何东西,但是它不会与实际安装的包相同。我认为您假设运行该命令只会从已安装的包中派生锁文件,但实际上它会生成锁文件,就好像您在没有标记的情况下运行它一样。

因此,总之,两个锁文件都解析为同一依赖项的不同版本(次要/修补程序)。

票数 5
EN

Stack Overflow用户

发布于 2021-08-04 14:53:12

这不是雅恩和尼姆之间的一对一的比较。确实,它们没有报告完全相同的审计警告,但如果您执行以下操作,可以从Yarn获得相同/相似的结果:

代码语言:javascript
复制
rm ./yarn.lock
yarn
yarn audit

为什么会这样呢?因为Yarn使用的是以前依赖管理工作中的知识,而Npm从零开始,以前从未在您的项目中运行过。如果您删除yarn.lock,纱也将从头开始。无论哪种方式,您都将获得所有库的最新修补程序级版本,否则就不会有这些版本了。这将导致您的许多审计警告消失。

那么yarn.lockpackage-lock.json又是什么呢?每次成功运行安装后,Yarn将node_modules的最新状态(依赖树)保存在yarn.lock中。NPM在package-lock.json中也是如此。这两个自动生成的文件类似于您的package.json的详细版本,列出了您安装的每个依赖项和子依赖项(版本号降到x.x.x修补程序级别)以及它们安装的原因。这样,您的node_modules在每次运行yarn installnpm install时都会看起来完全相同。

但是,这两个锁文件是由相应的包管理器独占使用的,并且不兼容:如果您交替使用这两个锁文件,则纱线和Npm可能会不断地更改您的node_modules。这将导致许多微妙的错误。这就是为什么你通常应该坚持在一个项目中使用Yarn或Npm。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58518471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档