问题描述
想要通过在 pre-push 钩子中添加 npm audit
命令来强制开发人员更频繁地更新漏洞。他们认为这样做可以减少 dependabot 的警报次数。然而,虽然 dependabot 仍在向他们的仓库提出 Pull Request (PR),但 npm audit
命令却显示一切正常。根据他的理解,它们都从同一个数据库读取漏洞信息,详情可以参考这篇文章: https://github.blog/2021-10-07-github-advisory-database-now-powers-npm-audit/。那么,为什么 npm audit
不返回漏洞,而 dependabot 却有警报呢?
解决方案
请注意以下操作可能存在版本差异,建议在进行操作前备份项目数据。
方案1
npm audit
命令和 dependabot 是两个不同的工具,虽然它们都涉及漏洞信息,但其机制和数据源有所不同。可能的原因是它们使用了不同的漏洞数据库或更新频率存在差异。
首先,你可以确保项目依赖的漏洞信息是最新的。执行以下步骤:
- 打开终端,进入你的项目目录。
- 运行以下命令来更新项目依赖的漏洞信息:
npm update
npm audit - 检查
npm audit
的输出,确保它显示的漏洞信息是最新的。
如果 npm audit
仍然没有返回漏洞,而 dependabot 有警报,可以尝试方案2。
方案2
如果 npm audit
和 dependabot 确实使用了相同的漏洞数据库,但结果不一致,那么可能是由于它们的扫描触发时机不同。dependabot 可能会在每次推送(Push)后自动触发,而 npm audit
只在手动运行时才会扫描漏洞。
你可以将 npm audit
集成到 pre-push 钩子中,确保在每次推送前都执行漏洞扫描。以下是实现这一目标的步骤:
- 打开项目的 package.json 文件。
- 找到 “scripts” 部分,如果没有,可以自行添加。
- 在 “scripts” 部分中添加一个新的脚本,命名为 “prepush”,内容如下:
json
"scripts": {
"prepush": "npm audit"
} - 保存 package.json 文件。
- 运行以下命令来安装 pre-push 钩子工具:
npm install --save-dev pre-push
- 在项目根目录下创建一个名为 “pre-push” 的文件,没有后缀。
- 将以下内容添加到 “pre-push” 文件中:
bash
#!/bin/sh
npm run prepush - 保存 “pre-push” 文件,并确保它具有可执行权限:
chmod +x pre-push
现在,每次执行推送操作时,都会自动运行 npm audit
进行漏洞扫描。这样可以确保在每次推送前都检查项目的漏洞情况,与 dependabot 的触发时机更接近。
通过以上两个方案,你可以更好地控制漏洞检查的时机和准确性,以便提醒开发人员及时更新漏洞。