今天是星期二!来自GitHub的每周dependabot提醒的日子!一个很好的提醒,检查你的项目,通常只是点击几下的工作,自动更新是非常好的。
如果没有,快速的npm audit fix
,也许能毫无问题地进行所有的更新。哦,等等,这个项目有一个yarn.lock
文件!我应该如何处理这个问题?一个yarn audit fix
,不存在也不会发生!我应该怎么做?手动检查锁定文件?
来吧,通常yarn audit
,看起来像这样。
4566 vulnerabilities found - Packages audited: 990
Severity: 1 Low | 89 Moderate | 4476 High
✨ Done in 4.66s.
不,有一个更好的方法。或者甚至更好的方法。请注意,我的经验涉及Yarn版本1,直到今天还在广泛使用。我没有考虑到即将到来的版本,如浆果。
可能是好的,也可能是坏的#。
这是最简单的方法。第1步:删除你的锁定文件和node_modules
!
$ rm yarn.lock
$ rm -rf node_modules
酷。第2步。通过重新安装所有东西来创建一个新的锁文件。
$ yarn install
第3步。再检查一次!
$ yarn audit
也许这就是你所需要的一切。只是重新安装你现有的依赖关系,其中所有的临时依赖关系都更新到了最新的版本。如果这还不够好,就从长计议。
漫长的路途#
漫长的道路包括手动升级你的依赖,可以通过yarn upgrade
,也可以通过更复杂的yarn upgrade-interactive
$ yarn upgrade-interactive
后者给你一个漂亮的视图,你可以选择你想更新的软件包。还有,他们在哪个州。需要更新,但在SEMVER限制范围内,还是有可能沿途破坏一切。SEMVER和Node.js是一把双刃剑。只要人们知道SEMVER的限制和影响并坚持下去,这就很好。不过,情况可能并不总是如此。
但是,嘿,让我们沿途升级一切,看看结果如何。
23 vulnerabilities found - Packages audited: 1126
Severity: 1 Low | 10 Moderate | 12 High
✨ Done in 1.42s.
很好,这比早些时候少了很多......仍有一些依赖性的东西是脆弱的。审计还告诉我们哪些版本受到影响,哪些版本有补丁。
这实际上是有时让我有点难过的部分。如果你在你的依赖关系中看到几个修复问题的版本门,这有时会告诉我们,开发人员花时间做安全修复的Backport,只是为了给那些在SEMVER限制范围内的人一个使用旧版本软件包的机会。
尽管如此,我们还是无法升级。
但我们可以做的是,告诉Yarn哪个版本用于哪个深度嵌套的依赖。例如,如果我们想升级glob-parent
的所有用途,让我们在我们的resolution
。package.json
"resolutions": {
"**/glob-parent": "^5.1.2"
}
这里的模式告诉我们,我们要把所有的过渡性依赖关系更新到5.1.2版本。chokidar
如果我们想把例如glob-parent
的版本更新为不同的版本,我们会用chokidar/**/glob-parent
来实现。更多细节请参见选择性依赖性决议。
它有帮助吗?有一点儿!
20 vulnerabilities found - Packages audited: 1122
Severity: 1 Low | 7 Moderate | 12 High
✨ Done in 1.50s.
现在,让我们继续处理所有其他的依赖关系,享受你的星期二吧!
捷径#
另一个解决方案是走捷径,让NPM处理审计并修复它。这是我通常做的事情。
首先,我只安装了一个package-lock.json
$ npm i --package-lock-only
没有实际的模块安装,只是概述了NPM认为需要做的事情。这可以归结为几个方面的依赖。这些是重新安装不能解决的问题,需要修复。NPM没有显示每个依赖关系的解析,而是显示有漏洞的软件包。
found 3 vulnerabilities (1 low, 2 moderate)
run `npm audit fix` to fix them, or `npm audit` for details
audit
,为我们提供更多信息。
$ npm audit
=== npm audit security report ===
# Run npm install --save-dev concurrently@6.2.0 to resolve 1 vulnerability
SEMVER WARNING: Recommended action is a potentially breaking change
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ yargs-parser │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ concurrently [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ concurrently > yargs > yargs-parser │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1500 │
└───────────────┴──────────────────────────────────────────────────────────────┘
# Run npm install --save-dev nodemon@2.0.9 to resolve 1 vulnerability
SEMVER WARNING: Recommended action is a potentially breaking change
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate │ Regular expression denial of service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ glob-parent │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ nodemon [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ nodemon > chokidar > glob-parent │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1751 │
└───────────────┴──────────────────────────────────────────────────────────────┘
# Run npm install --save-dev webpack@5.42.1 to resolve 1 vulnerability
SEMVER WARNING: Recommended action is a potentially breaking change
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate │ Regular expression denial of service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ glob-parent │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ webpack [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ webpack > watchpack > watchpack-chokidar2 > chokidar > │
│ │ glob-parent │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://npmjs.com/advisories/1751 │
└───────────────┴──────────────────────────────────────────────────────────────┘
found 3 vulnerabilities (1 low, 2 moderate) in 1092 scanned packages
3 vulnerabilities require semver-major dependency updates.
NPM有自动修复的可能性。
$ npm audit fix
如果有SEMVER警告,让我们手动检查每个依赖关系,覆盖所有的警告,无论如何都要升级。
$ npm audit fix --force
NPM会相应地更新一切。是时候创建一个新的yarn.lock
文件了。拆除旧的,并打电话给yarn import
。
$ rm yarn.lock
$ yarn import
Yarn会根据你的package-lock.json
,创建锁文件。不再需要package-lock.json
,所以让我们摆脱它,再做一次审计。
$ rm package-lock.json
$ yarn audit
yarn audit v1.22.10
0 vulnerabilities found - Packages audited: 945
✨ Done in 1.20s.
✨ 确实如此。提交,推送,并摆脱你所有的dependabot警报。