关于 frontend-review-deps
用于审查前端依赖的新旧程度、漏洞风险和维护趋势的技能,按攻击路径指导 CVE 分级并提出迁移建议,且不修改项目源文件。
主要功能
- 01查找过时的软件包
- 02按攻击路径分级 CVE
- 03识别弃用或趋势下滑的库
- 04建议迁移方案和工作量
- 05生成依赖审查报告
适用场景
- 01发布前检查依赖健康状况
- 02评估 SPA 或 SSR 应用的运行时漏洞
- 03规划从弃用库迁移
- 04准备独立的依赖更新拉取请求
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mizchi/ skills --skill frontend-review-deps安装后在 Claude Code 中输入/frontend-review-deps确认已加载。
附带文件README.md
详细介绍
前端审查 — 依赖项
你正在审计一个前端项目的依赖健康状况。审查涵盖以下三个方面:
- 新鲜度 — 过时的包和破坏性更新流程
- CVE 分级 — 根据实际攻击向量评估漏洞,而不只是看 CVSS 分数
- 趋势监测 — 应迁移的已弃用、无人维护或已有替代方案的库
流程
- 并行运行:
scripts/audit-deps.sh --repo <client-repo>scripts/audit-trend-watch.sh --repo <client-repo>
- 阅读
raw/deps.json和raw/trend-watch.json。 - 对每项 CVE 发现,先应用下方的攻击向量分级矩阵,再确定优先级。
- 对每项趋势监测发现(Tier 1/2/3),确认已安装的版本并评估迁移成本。
CVE 分级 — 攻击向量矩阵
不要仅依据 CVSS 分数进行判断。对于仅在浏览器运行的 SPA,即使是 CVSS 9.8 的 RCE,也不会对生产环境造成影响。
| CVE 类型 | 仅 devDep | 运行时(SPA) | 运行时(SSR/Edge) |
|---|---|---|---|
| RCE | 忽略 | 忽略 | P0 |
| 原型污染 | 忽略 | P1(检查输入路径) | P0 |
| ReDoS | 忽略 | P1(检查用户输入是否可达) | P0 |
| 路径遍历 | 忽略 | 忽略 | P0 |
| 库导致的 XSS | 忽略 | P0(生成 HTML 的库) | P0 |
| SSRF | 忽略 | 忽略 | P0 |
| 供应链(postinstall 恶意软件) | CI P0 | CI P0 | P0 |
分级流程:
- 运行
pnpm audit --prod,从输出中排除 devDeps。 - 重点关注原型污染 / ReDoS / XSS——对于仅在浏览器运行的 SPA,其他类型风险较低。
- 对每项剩余发现,检查用户控制的输入是否能到达存在漏洞的代码路径。如果不能,将优先级降至 P2。
- 对于 SSR / Edge Functions,将 RCE / 路径遍历 / SSRF 视为 P0。
- 在
kpi/audit-triage.md中记录每项被忽略的 CVE 及忽略原因。
# Runtime-only CVEs (excludes devDeps)
pnpm audit --prod --audit-level=moderate --json | jq '
.vulnerabilities | to_entries[] |
{ name: .key, severity: .value.severity,
via: [.value.via[] | select(type=="object") | .title] }'
# Prototype Pollution / ReDoS only
pnpm audit --prod --json 2>/dev/null | jq -r '
.vulnerabilities | to_entries[] |
.value.via[] | select(type=="object") |
select(.title | test("prototype|pollution|redos|regex denial"; "i")) |
"\(.severity) \(.title) in \(.name)"' | sort -u
趋势监测 — 库分级
将 package.json 与 data/trend-watch-config.json 进行交叉比对:
- Tier 1(立即迁移):已弃用 / 无人维护 / 已有替代方案——没有合理理由继续使用。也包括迁移成本低且存在成熟替代方案的库,即使它们未被正式弃用(
jest→ vitest、axios→ ky/fetch、cypress→ Playwright)。 - Tier 2(规划迁移):处于维护模式 / 满意度下降 / 与 RSC 不兼容。
- Tier 3(持续关注):存在已到生命周期终止(EOL)的版本 / 满意度呈下降趋势。
对于每项 Tier 1 发现:提出具体的迁移路径并估算所需时间(小时/天)。 对于每项 Tier 2 发现:建议安排在未来 1–3 个月内迁移。 对于每项 Tier 3 发现:添加到持续监测列表。
库的选择 — 优先采用 Web 标准
在建议用新依赖替代之前,按以下顺序评估:
- Web Platform / ECMAScript 标准 API 能否满足需求?
| 用例 | 避免使用 | 改用 |
|---|---|---|
| 日期 / 时间 | moment、date-fns、dayjs | Temporal(polyfill);简单场景使用 Date |
| 数组 / 对象工具 | lodash、ramda | Array.prototype.{flatMap,findLast,groupBy}、Object.{entries,fromEntries,groupBy}、structuredClone() |
| HTTP 请求 | axios、request | fetch + AbortController |
| UUID 生成 | uuid、nanoid | crypto.randomUUID() |
| URL / 查询参数 | qs、query-string | URL、URLSearchParams |
| 数字 / 日期格式化 | numeral.js | Intl.NumberFormat、Intl.DateTimeFormat |
- 是否支持 Tree-shaking? 只有导入的内容才应进入打包产物。
- 是否在积极维护? 最近 6 个月内有发布版本。
- 打包体积影响是否小于 5 kb gzip? 使用
pnpm build和打包分析器进行验证。
破坏性更新流程
- 提议作为独立 PR 提交——绝不与功能或重构工作合并。
- 阅读更新日志,了解已移除的 API;使用 grep / ast-grep 搜索代码库中的用法。
- 合并前要求
typecheck && lint && test:ci && e2e全部通过。 - 如果存在 VRT 快照,升级后在 Linux 容器中重新生成。
输出
将以下内容写入 <client-repo>/.frontend-review/report/latest/md/deps-review.md:
- 过时的软件包表格(名称、当前版本、最新版本、是否有破坏性变更)
- CVE 发现项(经攻击向量分类后,包含优先级、软件包、类型、优先级理由)
- 趋势观察发现项(按层级划分:Tier 1:立即迁移,Tier 2:规划,Tier 3:监控)
- 忽略的 CVE及其理由(用于
kpi/audit-triage.md) - 建议的 PR:更新批次 + 迁移起点
范围边界
- 不要评估 TypeScript / lint / 死代码 — 这属于
frontend-review-hygiene。 - 不要运行 AI 渗透测试或检查 HTML 接收点 — 这属于
frontend-review-security。 - 不要触碰客户端仓库中的源文件。
参考资料
- 检查清单:
02-dependencies.md、27-dependency-audit.md、28-trend-watch.md - 数据:
data/trend-watch-config.json、data/trend-watch-history.json - 脚本:
scripts/audit-deps.sh、scripts/audit-trend-watch.sh、scripts/fetch-trend-data.sh - 阶段:
week-1-ci-baseline.md
评论
支持 Markdown