因此,到目前为止,似乎还没有yarn audit --fix
,所以我试图弄清楚如何解决我的yarn audit
错误。
我尝试过yarn upgrade
,它已修复了一些错误(很好),但仍然存在一些错误。
然后,我尝试使用yarn add <package>@latest
来修复其余的高漏洞,但是当我认为问题来自我所使用的软件包的依赖关系时,它将升级我的package.json
中的版本。 / p>
以下是我一些剩余错误的示例:
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=3.0.2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-stream > glob > minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/118 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=3.0.2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-stream > minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/118 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=3.0.2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-watcher > gaze > globule > glob > │
│ │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/118 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ high │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=3.0.2 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-watcher > gaze > globule > minimatch │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/118 │
└───────────────┴──────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ moderate │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=4.17.11 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ gulp │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ gulp > vinyl-fs > glob-watcher > gaze > globule > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/782 │
└───────────────┴──────────────────────────────────────────────────────────────┘
答案 0 :(得分:9)
虽然resolutions
有效,但这不是最佳解决方案,因为:
package.json
带有传递依赖项的解决方法A
依赖于B@^4.0.0
,然后更新B并将其解析为^4.3.2
。稍后,A得到更新并需要B@^5.0.0
,但您仍将B解析为^4.3.2
,这不再兼容。这是更新传递依赖项的另一种方法:
yarn.lock
删除要更新的依赖项的版本yarn install
通过这种方式,您可以迫使yarn再次解决依赖关系,并且在大多数情况下,yarn将安装从yarn.lock
中删除的更新版本。
示例:假设您要更新易受攻击的minimist@0.0.8
,然后需要从yarn.lock
删除这样的条目:
minimist@0.0.8:
version "0.0.8"
resolved "http://10.0.0.1/repository/npm-registry/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
然后运行yarn install
。
如果这没有帮助:
尝试更新依赖关系链中更高的依赖关系:
yarn why <dependency>
找出哪些包将其拉出yarn.lock
删除链中的上层依赖项,然后运行yarn install
示例:
这里是一个示例,其中我们更新了传递依赖项minimist
:
$ yarn why minimist
.....
=> Found "mkdirp#minimist@0.0.8"
info This module exists because "eslint#mkdirp" depends on it.
=> Found "optimist#minimist@0.0.10"
info This module exists because "jest#jest-cli#@jest#core#@jest#reporters#istanbul-reports#handlebars#optimist" depends on it.
.....
minimist
项并运行yarn install
->这无济于事,可能是因为mkdirp
和optimist
恰好需要minimist@0.0.8
和minimist@0.0.10
minimist
和mkdirp
中删除optimist
的“直接父母”。yarn install
。再次运行yarn why minimist
:
$ yarn why minimist
.....
=> Found "mkdirp#minimist@1.2.5"
info This module exists because "eslint#mkdirp" depends on it.
=> Found "optimist#minimist@0.0.10"
info This module exists because "jest#jest-cli#@jest#core#@jest#reporters#istanbul-reports#handlebars#optimist" depends on it.
.....
在这里我们看到minimist@0.0.8
已更新为minimist@1.2.5
,但是minimist@0.0.10
仍然存在。
从yarn.lock
:handlebars
yarn install
yarn why minimist
-没什么变化,minimist@0.0.10
仍然在那里。yarn.lock
中删除链中的下一个依赖项:istanbul-reports
yarn install
yarn why minimist
:minimist@0.0.10
不再存在,因为istanbul-reports
已更新。答案 1 :(得分:0)
在纱线中解决此问题的方法称为selective version resolutions,基本上是为resolutions
中的传递依存关系定义package.json
。
transitive dependencies
是依赖项的依赖项。
{
"resolutions": { "**/**/lodash": "^4.17.12" }
}
因此在这里,即使lodash不是您程序包的直接依赖项,您程序包中的依赖程序包也使用决议中定义的版本。也可以提供特定的分辨率。更多信息here。