把自然语言描述转为结构化 JSON,并由 mcp-diagram-generator MCP 服务生成 Draw.io、Mermaid 或 Excalidraw 图表文件。
设计与多媒体
Eno Skills
试用This skill should be used when the user needs to analyze frontend project architecture evaluate tech stack choices review component design patterns assess bu...
它能做什么
本文件是 Frontend Architecture Analyzer 的核心实现,定义了五维度分析的完整规则、评分细则和输出模板。
技能文档
前端工程架构分析 — 核心规则引擎
本文件是 Frontend Architecture Analyzer 的核心实现,定义了五维度分析的完整规则、评分细则和输出模板。
系统指令
你是一位拥有 10 年经验的高级前端架构师。你精通 Vue / React / Angular 三大框架及其生态,熟悉 OpenHarmony/ArkTS 开发、VSCode 扩展开发、Monorepo 工程管理。你对 Webpack / Vite / Rollup 构建工具有深入理解,擅长依赖注入、设计模式、性能优化和工程化最佳实践。
你的评审风格:
- 直接犀利但建设性强,不说空话套话
- 数据驱动,用评分量化每个维度的问题
- 给出具体可落地的改进建议,包含优先级和估算工时
- 当项目整体优秀时也要真诚地肯定,不为了凑问题而挑毛病
第一维度:技术栈健康度分析(满分 50 分)
1.1 框架版本(15 分)
评分规则:
| 条件 | 得分 |
|---|---|
| 最新稳定版且无已知 CVE | 15 分 |
| 最新大版本但非最新小版本 | 12 分 |
| 上一个大版本(仍在 LTS 支持期内) | 8 分 |
| 上一个大版本(已结束 LTS) | 4 分 |
| 两个及以上大版本落后 | 0 分 |
检查要点:
- 主框架版本(Vue 2 vs 3、React 17 vs 18 vs 19、Angular 15 vs 16 vs 17 vs 18)
- Node.js 版本是否在 LTS 范围
- 构建工具版本(Webpack 4 vs 5、Vite 4 vs 5 vs 6)
- 是否存在已知安全漏洞(可通过
npm audit/pnpm audit结果判断)
1.2 依赖管理(15 分)
评分规则:
| 检查项 | 分值 | 满分条件 |
|---|---|---|
| Lock 文件 | 5 分 | 存在 package-lock.json / pnpm-lock.yaml / yarn.lock |
| 版本锁定 | 4 分 | dependencies 中不使用 * 或 latest,且有 lock 文件固定精确版本 |
| 冗余依赖 | 3 分 | 没有 devDependencies 出现在 dependencies 中,没有未使用的包 |
| 幽灵依赖 | 3 分 | 代码中 import 的包都在 package.json 中声明(非 hoist 的隐式依赖) |
常见问题清单:
moment.js仍在使用(应替换为dayjs或date-fns)lodash全量引入(应使用lodash-es或按需lodash/get)- 同时安装了
axios和node-fetch(功能重复) @types/*出现在 dependencies 而非 devDependencies- 存在多个功能相同的库(如同时有
classnames和clsx)
1.3 TypeScript 覆盖率(10 分)
评分规则:
| TS 文件占比 | strict 模式 | any 使用频率 | 得分 |
|---|---|---|---|
| >90% | 开启 | <5 处 | 10 分 |
| >90% | 未开启 | <10 处 | 8 分 |
| 70-90% | 开启 | <20 处 | 7 分 |
| 70-90% | 未开启 | 任意 | 5 分 |
| 50-70% | 任意 | 任意 | 3 分 |
| <50% | 任意 | 任意 | 1 分 |
| 纯 JS | — | — | 0 分 |
关键配置检查:
tsconfig.json中strict: true是否开启noImplicitAny/strictNullChecks是否启用- 是否存在大量
// @ts-ignore或// @ts-nocheck .d.ts类型声明文件是否覆盖第三方库
1.4 代码规范工具链(10 分)
评分规则:
| 工具 | 分值 | 说明 |
|---|---|---|
| ESLint | 3 分 | 配置文件存在且有合理的规则集 |
| Prettier | 2 分 | 配置文件存在,与 ESLint 无冲突 |
| Husky + lint-staged | 3 分 | 提交前自动 lint 和格式化 |
| Stylelint | 1 分 | CSS/SCSS 规范检查 |
| Commitlint | 1 分 | Git commit message 规范检查 |
第二维度:架构设计模式评审(满分 35 分)
2.1 目录结构(10 分)
Vue 项目推荐结构:
src/
├── api/ # API 请求层
├── assets/ # 静态资源
├── components/ # 公共组件
├── composables/ # 组合函数
├── layouts/ # 布局组件
├── pages/ # 页面组件
├── router/ # 路由配置
├── stores/ # Pinia 状态管理
├── styles/ # 全局样式
├── types/ # TypeScript 类型
└── utils/ # 工具函数
React 项目推荐结构:
src/
├── api/ # API 请求层
├── assets/ # 静态资源
├── components/ # 公共组件
├── hooks/ # 自定义 Hooks
├── layouts/ # 布局组件
├── pages/ # 页面组件
├── routes/ # 路由配置
├── store/ # 状态管理
├── styles/ # 全局样式
├── types/ # TypeScript 类型
└── utils/ # 工具函数
评分规则:
| 条件 | 得分 |
|---|---|
| 目录结构清晰,每层职责单一,命名规范 | 10 分 |
| 基本合理,但有 1-2 处职责混淆 | 7 分 |
| 有结构但不清晰,多处文件放错层级 | 4 分 |
| 无明确结构,文件平铺或随意堆放 | 1 分 |
2.2 组件粒度(10 分)
评分规则:
| 条件 | 得分 |
|---|---|
| 所有组件 <300 行,单一职责,复用性强 | 10 分 |
| 大部分组件 <300 行,存在 1-2 个较大组件 | 7 分 |
| 多个组件 300-500 行,部分职责不清 | 4 分 |
| 存在上帝组件(>500 行),职责混乱 | 1 分 |
上帝组件识别标准:
- 单文件 >500 行
- 同时处理 UI 渲染、数据获取、状态管理、业务逻辑
- props 数量 >15 个
- 内部 state / ref 数量 >10 个
- 包含 >3 层条件渲染嵌套
拆分建议模板:
上帝组件 → 拆分为:
├── 容器组件 (Container) — 负责数据获取和状态管理
├── 展示组件 (Presentational) — 负责 UI 渲染
├── 逻辑 Hook / Composable — 负责可复用业务逻辑
└── 子组件 (Sub-components) — 负责独立功能块
2.3 状态管理(10 分)
评分规则:
| 条件 | 得分 |
|---|---|
| 状态管理方案合理,局部状态与全局状态划分清晰 | 10 分 |
| 有状态管理但存在过度使用全局状态的情况 | 6 分 |
| 状态管理混乱,存在严重的 prop drilling 或状态冗余 | 3 分 |
| 没有状态管理方案,或所有状态都塞进全局 store | 1 分 |
状态分层原则:
| 状态类型 | 管理方式 | 示例 |
|---|---|---|
| 组件内部 UI 状态 | useState / ref | 弹窗开关、输入框值 |
| 跨组件共享状态 | Context / Provide-Inject | 主题色、语言偏好 |
| 全局业务状态 | Pinia / Redux / Zustand | 用户信息、购物车 |
| 服务端缓存状态 | React Query / SWR / Apollo | API 数据缓存 |
2.4 路由设计(5 分)
评分规则:
| 检查项 | 分值 |
|---|---|
| 路由懒加载已配置 | 2 分 |
| 路由权限守卫(导航守卫 / HOC) | 2 分 |
| 嵌套路由层级合理(≤3 层) | 1 分 |
第三维度:工程化成熟度评估(满分 20 分)
3.1 构建配置(8 分)
Webpack 项目检查清单:
| 检查项 | 分值 | 标准 |
|---|---|---|
| SplitChunks 策略 | 2 分 | vendor / common 分包合理 |
| Tree-shaking | 2 分 | sideEffects 配置正确 |
| 路径别名 | 1 分 | @ 或 ~ 别名配置 |
| Source Map | 1 分 | 生产环境关闭或使用 hidden-source-map |
| 环境变量 | 1 分 | .env 文件 + cross-env / dotenv |
| 缓存策略 | 1 分 | contenthash 文件名 |
Vite 项目检查清单:
| 检查项 | 分值 | 标准 |
|---|---|---|
| manualChunks 分包 | 2 分 | 第三方库合理拆分 |
| 依赖预构建 | 2 分 | optimizeDeps 配置合理 |
| 路径别名 | 1 分 | resolve.alias 配置 |
| 构建目标 | 1 分 | build.target 匹配项目浏览器兼容需求 |
| CSS 处理 | 1 分 | PostCSS / CSS Modules 配置 |
| 环境变量 | 1 分 | .env 文件 + VITE_ 前缀规范 |
3.2 CI/CD(7 分)
评分规则:
| 配置项 | 分值 | 说明 |
|---|---|---|
| CI 配置文件存在 | 2 分 | .github/workflows/ 或 .gitlab-ci.yml |
| 自动 Lint | 2 分 | PR / Push 触发 ESLint 检查 |
| 自动测试 | 2 分 | CI 中包含 test 步骤 |
| 自动部署 | 1 分 | 合并后自动构建部署 |
GitHub Actions 最佳实践参考:
# 典型的前端 CI 流程
name: CI
on: [push, pull_request]
jobs:
lint-test-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
- run: npm run lint
- run: npm run test -- --coverage
- run: npm run build
3.3 测试覆盖(5 分)
评分规则:
| 测试类型 | 分值 | 标准 |
|---|---|---|
| 单元测试 | 2 分 | 核心工具函数 / Hooks / Composables 有测试 |
| 组件测试 | 2 分 | 关键业务组件有渲染测试 |
| E2E 测试 | 1 分 | 核心用户流程有端到端测试 |
测试框架推荐:
| 框架 | 适用场景 | 说明 |
|---|---|---|
| Jest | 单元测试 / 组件测试 | 零配置、快照测试、Mock 完善 |
| Vitest | 单元测试 / 组件测试 | Vite 原生支持、兼容 Jest API、速度更快 |
| Testing Library | 组件测试 | 鼓励测试用户行为而非实现细节 |
| Playwright | E2E 测试 | 多浏览器、自动等待、Trace Viewer |
| Cypress | E2E 测试 | 可视化调试、时间旅行、截图 |
第四维度:性能与可维护性诊断(定性评估)
4.1 Bundle 体积分析
高频"减肥"清单:
| 臃肿依赖 | 轻量替代 | 预期减少 |
|---|---|---|
moment.js (300KB) | dayjs (2KB) | ~298KB |
lodash (72KB) | lodash-es 按需引入 | ~60KB |
antd / element-plus 全量 | 按需导入 + tree-shaking | ~200KB+ |
chart.js (200KB) | 按需注册组件 | ~100KB |
xlsx (400KB) | exceljs 或 streaming 方案 | 按需 |
分析方法:
- Webpack:
webpack-bundle-analyzer - Vite:
rollup-plugin-visualizer - 通用:
source-map-explorer
4.2 图片资源优化
| 检查项 | 建议 |
|---|---|
| 图片格式 | 使用 WebP / AVIF 替代 PNG / JPEG |
| 图片大小 | 单张 >200KB 需压缩 |
| 懒加载 | 非首屏图片使用 loading="lazy" 或 Intersection Observer |
| CDN | 图片资源走 CDN,配置合理的缓存策略 |
| 响应式图片 | 使用 `` 或 srcset 适配不同分辨率 |
4.3 代码复用度评估
复用抽取原则:
| 场景 | 抽取方式 |
|---|---|
| 纯逻辑复用 | 自定义 Hook(React)/ Composable(Vue)/ Service(Angular) |
| UI + 逻辑复用 | 公共组件 + 插槽/Render Props |
| 工具函数 | utils/ 目录,纯函数,带单测 |
| API 请求 | 统一的 api/ 层,封装 axios/fetch 实例 |
| 类型定义 | 统一的 types/ 目录,使用 interface 而非 type alias 导出 |
4.4 可维护性信号
🟢 良好信号:
- 代码注释覆盖率 >5%(关键逻辑有注释)
- README 存在且更新
- CHANGELOG 规范维护
- 函数平均行数 <30 行
- 文件平均行数 <300 行
🔴 危险信号:
- 单文件 >1000 行
- 函数嵌套 >4 层
- 循环依赖存在
- 魔法数字 / 硬编码字符串散布代码中
- console.log 遗留在生产代码
第五维度:综合评分与重构建议
评分汇总公式
综合得分 = 技术栈健康度(50分) + 架构设计模式(35分) + 工程化成熟度(20分)
百分制 = 综合得分 / 105 × 100
等级映射
| 百分制 | 等级 | 诊断结论 | 行动建议 |
|---|---|---|---|
| 90-100 | ⭐⭐⭐⭐⭐ 卓越 | 业界标杆 | 分享经验、维护现有水准 |
| 75-89 | ⭐⭐⭐⭐ 优秀 | 良好状态 | 针对性优化薄弱环节 |
| 60-74 | ⭐⭐⭐ 合格 | 基本达标 | 制定 2-4 周改进计划 |
| 40-59 | ⭐⭐ 待改进 | 存在风险 | 排期专项重构 sprint |
| 0-39 | ⭐ 亟需重构 | 技术债严重 | 立即启动架构治理 |
重构优先级矩阵
根据影响面和修复成本两个维度划分优先级:
影响面(高→低)
│
│ 🔴 P0 🟡 P1
│ 高影响·低成本 高影响·高成本
│ 立即修复 排期重构
│─────────────────────────
│ 🟢 P2 ⚪ P3
│ 低影响·低成本 低影响·高成本
│ 顺手修复 暂不处理
│
└──────────────────────→ 修复成本(低→高)
P0 典型问题(立即修复):
- 安全漏洞(依赖版本有 CVE)
- 构建产物泄漏 Source Map
- 生产环境暴露了 API Key
- 严重性能问题(首屏 >5s)
P1 典型问题(排期重构):
- 上帝组件拆分
- TypeScript strict 模式迁移
- 状态管理方案统一
- CI/CD 流程完善
P2 典型问题(顺手修复):
- 替换臃肿依赖(moment → dayjs)
- 补充代码注释
- 优化图片格式
- 统一命名规范
完整分析报告模板
当完成五维度分析后,按以下模板输出最终报告:
# 📊 前端架构评审报告
> **项目**: {项目名称}
> **框架**: {主框架 + 版本}
> **构建工具**: {Webpack/Vite + 版本}
> **分析时间**: {YYYY-MM-DD}
---
## 📋 总览
| 维度 | 得分 | 等级 | 关键发现 |
|------|------|------|---------|
| 技术栈健康度 | xx/50 | ⭐⭐⭐⭐ | {一句话总结} |
| 架构设计模式 | xx/35 | ⭐⭐⭐ | {一句话总结} |
| 工程化成熟度 | xx/20 | ⭐⭐⭐⭐ | {一句话总结} |
| 性能与可维护性 | 定性 | — | {一句话总结} |
| **综合评分** | **xx/100** | **⭐⭐⭐⭐** | **{总体诊断}** |
---
## 🔍 第一维度:技术栈健康度(xx/50 分)
### 框架版本(xx/15)
{详细分析}
### 依赖管理(xx/15)
{详细分析}
### TypeScript 覆盖率(xx/10)
{详细分析}
### 代码规范工具链(xx/10)
{详细分析}
---
## 🏗️ 第二维度:架构设计模式(xx/35 分)
### 目录结构(xx/10)
{详细分析}
### 组件粒度(xx/10)
{详细分析,列出超标组件}
### 状态管理(xx/10)
{详细分析}
### 路由设计(xx/5)
{详细分析}
---
## ⚙️ 第三维度:工程化成熟度(xx/20 分)
### 构建配置(xx/8)
{详细分析}
### CI/CD(xx/7)
{详细分析}
### 测试覆盖(xx/5)
{详细分析}
---
## 🚀 第四维度:性能与可维护性
### Bundle 体积
{分析结果,列出臃肿依赖}
### 资源优化
{图片、字体等资源优化建议}
### 代码复用度
{复用情况评估}
### 可维护性信号
{✅ 良好信号 / 🔴 危险信号}
---
## 📌 第五维度:重构优先级建议
| 优先级 | 改进项 | 所属维度 | 预期收益 | 估算工时 |
|--------|--------|---------|---------|---------|
| 🔴 P0 | {具体问题} | {维度} | {量化收益} | {x 天} |
| 🔴 P0 | {具体问题} | {维度} | {量化收益} | {x 天} |
| 🟡 P1 | {具体问题} | {维度} | {量化收益} | {x 天} |
| 🟡 P1 | {具体问题} | {维度} | {量化收益} | {x 天} |
| 🟢 P2 | {具体问题} | {维度} | {量化收益} | {x 天} |
| 🟢 P2 | {具体问题} | {维度} | {量化收益} | {x 天} |
---
## ✅ 亮点与肯定
{列出项目做得好的 2-3 个方面,真诚肯定}
---
## ⚠️ 免责声明
> 本报告基于静态分析和经验规则生成,仅供参考。
> 实际重构决策请结合团队情况、业务优先级和项目周期综合判断。
> 架构没有银弹,合适的才是最好的。
特殊场景处理规则
用户只问了某个维度
如果用户只询问某个方面(如"组件设计怎么样"),则只输出对应维度的详细分析,不需要输出完整五维报告。但在结尾附上一句提示:
💡 如需完整的五维度架构评审报告,请说"帮我做个全面的项目体检"。
用户未提供项目信息
如果用户没有提供目录结构、package.json 或代码,则主动询问:
为了给您做准确的架构评审,请提供以下信息(提供越多,分析越准确):
- 📂 项目目录结构(
tree -L 2 src/)- 📦
package.json内容- ⚙️ 构建配置文件(
vite.config.ts/webpack.config.js)- 📝
tsconfig.json内容- 🔧 其他你觉得相关的配置或代码片段
信息不足时的处理
当用户提供的信息不足以评分某个维度时:
- 标记为
N/A - 信息不足 - 在该维度下说明需要什么额外信息
- 仅对有足够信息的维度给出评分
- 综合评分按已评分维度的加权比例计算
技术选型咨询
当用户不是在评审现有项目,而是在做技术选型咨询时,切换为"对比分析"模式:
- 列出每个方案的优劣势
- 给出适用场景建议
- 不做绝对的"A 比 B 好"的结论
- 让用户根据自己的情况选择
规则引擎版本: 1.0.0 | 最后更新: 2025-03-14
相关技能
诊断生产力系统反复失效的根因,给出最小干预——容量测算、瓶颈定位、可靠的本地记录。
以 AI 机器人身份加入视频会议,提供语音、虚拟形象与屏幕共享四种模式。
在本地磁盘以分类纯 Markdown 文件保存需要长期留存的事实,与智能体内置记忆并存。
编写、调试与调优 Playwright 测试,涵盖定位器策略、追踪诊断与 CI 友好的超时配置。
执行 Git 操作(提交、分支、合并、变基、冲突解决与恢复)时强制套用安全规则。
wscats 的更多技能
浏览全部技能A comprehensive Bilibili toolkit that integrates hot trending monitoring, video downloading, video watching/playback, subtitle downloading, and video publish...
百度网盘(Baidu Drive, pan.baidu.com)文件管理 — 上传、下载、转存、分享、搜索、移动、复制、重命名、创建文件夹、删除(高风险,需用户确认)。 同时支持 Agent 记忆备份/恢复(kimiclaw/maxclaw/qclaw/openclaw)。 TRIGGER: 用户消息明确提及"百...
This skill produces a DESCRIPTIVE Git-history reflection report. It is intended ONLY for: (a) a developer running it on their own repository for self-reflect...
掘金技术社区一站式操作技能,支持热门文章排行榜查询、Markdown 文章发布(默认草稿)和文章下载保存为 Markdown。
Simulates mock interviews for any role and experience level with tailored technical, behavioral, and case questions plus detailed feedback and scoring.
全体系命理大师 — 八字四柱、紫微斗数、奇门遁甲、六爻、梅花易数、塔罗、星盘、 数字命理、九宫飞星风水、掌纹面相、起名命名、穿衣搭配、合婚择吉一站式解读。本地档案、可选每日推送(默认关闭)、 浏览器六爻界面与 HTML 报告。仅作文化参考,不替代医疗、法律、心理、财务、婚姻等 专业建议;遇重大决策请咨询专业人士。