用途
该技能用于修复某仓库中的 Dependabot 安全告警:在尽量降低风险的前提下,更新存在漏洞的 npm 依赖,使其升级到已修复的版本。适用于用户提到 dependabot、security alerts、vulnerability、CVE 等场景。
主要能力与流程
-
定位漏洞:若已给定告警编号或包名,就聚焦该对象;否则通过
gh api repos/microsoft/powerplatform-vscode/dependabot/alerts查询所有开放告警,并用 jq 提取编号、包名、严重程度、受影响版本范围、首个修复版本和摘要。查询单个告警的详情用gh api repos/microsoft/powerplatform-vscode/dependabot/alerts/<alert-number>。 -
分析依赖关系:判断漏洞包是 package.json 中的直接依赖,还是作为其他依赖的依赖被引入的传递依赖,用
npm ls <package-name>查看它在依赖树中的位置。 -
选择修复策略:
- 直接依赖:查看当前版本与更新版本之间的变更日志和发布说明,确认破坏性变更,然后用
npm install <package-name>@<patched-version> --save升级。 - 传递依赖:先找出引入该漏洞包的直接依赖;若该直接依赖有使用修复版本的新版本,就升级它;若没有,就在 package.json 的
overrides中指定漏洞包的修复版本。
- 直接依赖:查看当前版本与更新版本之间的变更日志和发布说明,确认破坏性变更,然后用
-
验证修复:再次运行
npm ls <package-name>确认版本,运行npm run build(该代码库使用 gulp 构建扩展)和npm test确保无破坏。 -
处理常见问题:遇到 peer dependency 冲突时,可谨慎尝试
--legacy-peer-deps或--force,并考虑先更新冲突包;遇到破坏性变更时,阅读迁移指南、调整代码与测试;同一包存在多个 CVE 时,确认所选修复版本覆盖全部漏洞。 -
提交变更:验证通过后,用描述性信息提交,说明包名、旧版本到新版本、对应 CVE(无 CVE 时用 GHSA ID)及破坏性变更的处理情况。在提交信息、PR 标题与正文、评论中引用告警时,必须用 CVE/GHSA ID 链接到告警的 html_url,告警编号只出现在完整 URL 内;不要写成
#283,因为 GitHub 会把它自动链接到同编号的 issue 或 PR。上游 issue 和 PR 则保留 owner/repo#<number> 形式。
使用方式
按上述步骤依次执行查询、分析、修复、验证和提交。技能提供了具体的命令行示例和 package.json 配置片段,可直接参考执行。
注意事项与限制
- 绝不跳过测试,安全修复不应破坏功能。
- 阅读变更日志,了解版本间变化;留意一次升级是否同时修复多个告警;若使用 overrides,应加注释说明原因。
- 严禁手工编辑 package-lock.json 中的完整性哈希:这些是 npm 注册表 tarball 内容的 SHA-512 校验和,手动改错会导致 CI 构建报 EINTEGRITY 错误。当 npm 解析到满足约束的缓存版本时,即便改了 package.json 也不会自动升级;正确做法是删除 node_modules 和 package-lock.json 后重新
npm install(推荐),或使用npm update <package-name>,或用npm install <package-name>@<version> --save强制重装,让 npm 自动获取 tarball 并计算正确哈希。