NPM Audit提示clean-css漏洞但npm show显示版本已达标,求排查
这是个非常常见的依赖树误区——你用npm show clean-css version查到的是这个包在npm仓库里的最新公开版本,但你的项目里实际运行的clean-css,是被gulp-cssmin间接依赖的旧版本,并不是最新的4.2.3。
先确认问题根源
执行下面的命令,查看你项目依赖树里clean-css的实际版本:
npm ls clean-css
输出会类似这样:
gulp-cssmin@0.2.0 > clean-css@4.1.10
这就说明,虽然clean-css本身已经更新到4.2.3,但你安装的gulp-cssmin版本还依赖着旧的4.1.10版本(低于要求的>=4.1.11),所以npm audit才会触发告警。
解决方法
根据你的情况,可以尝试以下几种方案:
更新gulp-cssmin到最新版本
很多时候,工具包的维护者会及时升级依赖来修复漏洞,直接更新gulp-cssmin可能就能解决问题:npm update gulp-cssmin --save-dev更新完成后,再执行
npm ls clean-css和npm audit检查是否修复。强制指定clean-css版本(npm 8+)
如果gulp-cssmin还没更新依赖,可以用npm的overrides功能,强制让整个项目使用符合要求的clean-css版本。在你的package.json里添加:"overrides": { "clean-css": "^4.2.3" }然后执行
npm install,npm会自动把所有依赖树里的clean-css替换成你指定的版本。直接安装最新版clean-css到项目(兼容旧版npm)
如果你用的是npm 8以下的版本,可以直接把最新版clean-css安装到项目的devDependencies里:npm install clean-css@^4.2.3 --save-devnpm会优先使用项目根目录下安装的版本,覆盖间接依赖的旧版本。
验证修复
完成上面的操作后,再执行npm ls clean-css确认版本已经>=4.1.11,然后运行npm audit,应该就不会再出现这个漏洞告警了。
内容的提问来源于stack exchange,提问作者Dan Cundy

