Communitygithub.com

jaimegago/agent-skills

高级前端工程指导,涵盖架构、组件设计、性能优化、设计系统、API集成和测试。适用于任何前端工程任务:构建组件、审查架构、搭建项目、调试性能、设计设计系统、编写测试或集成API。

agent-skills 是什么?

这是一个专为AI代理(如Claude Code、Cursor、Codex等)设计的前端开发技能,提供高级、务实、生产级的前端工程指导。它覆盖了各个主要框架(React、Angular、TypeScript)的栈检测、通用架构原则、组件设计规范、性能优化基线(LCP、INP、CLS)、设计系统与令牌管理、API集成模式、三层测试策略(单元、组件、E2E)以及工具链默认配置。该技能强调分离关注点、按功能组织代码、避免过早抽象,并提供了多模态输出指导(组件代码、架构设计、性能审计、设计系统设置、API集成、测试)。此外,它还引用了参考文件(如typescript.md、react.md)来补充栈特定细节,并与其他技能(如frontend-design)协作,以确保视觉美学与工程质量的平衡。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jaimegago/agent-skills/tree/HEAD/frontend-dev

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

前端开发技能

高级、务实、生产级的前端工程。目标始终是编写可工作、可维护、高性能的代码,而非学术上的纯粹。

栈检测

在所有操作之前,从上下文中识别技术栈。如果不明确,请询问。然后加载相应的参考文件。

栈加载
React (不含 GraphQL)references/react.md
React + GraphQL/Relayreferences/react-graphql.md
Angularreferences/angular.md
TypeScript (所有栈)references/typescript.md (与栈文件同时加载)

始终加载 references/typescript.md 以及栈文件,除非项目明确仅使用 JS。


通用原则

无论使用何种技术栈,这些原则都适用。不要跳过它们。

架构

  • 积极分离关注点:UI 渲染、业务逻辑、数据获取和副作用应位于不同层。组件不应包含 fetch 调用、原始 API 字符串或业务规则。
  • 按功能聚集,而非按类型:优先使用 features/user-profile/ 结构(包含组件 + hook + 测试 + 样式),而非顶层 components/、hooks/、tests/ 文件夹。根据应用复杂度调整结构规模——不要为小型应用过度设计。
  • 组合优于继承:通过组合小型、专注的组件来构建 UI。避免深层组件层级。
  • 不进行过早抽象:先写两次,然后再抽象。基于单一用例的抽象通常是错误的。

组件设计

  • 组件应只做一件事。如果一个组件有多个变更原因,则将其拆分。
  • 将展示组件(纯 UI,无副作用)与容器/智能组件(数据、逻辑、编排)分开。
  • Props 接口应显式且具有类型。不允许使用 any、object 或 {} 作为类型。
  • 默认对表单使用受控组件。

性能(不可妥协的基线)

核心 Web 指标目标(衡量真实用户的第 75 百分位数):

  • LCP ≤ 2.5 秒(加载)
  • INP ≤ 200 毫秒(交互性——自 2024 年 3 月起取代 FID)
  • CLS ≤ 0.1(视觉稳定性)

通用性能规则:

  • 绝不使用长时间同步任务阻塞主线程
  • 默认对路由和重型组件进行懒加载
  • 为所有图像和媒体设置显式尺寸(防止 CLS)
  • 在 LCP 图像上使用 fetchpriority="high"
  • 延迟加载非关键第三方脚本
  • 避免布局抖动(批量进行 DOM 读写)
  • 启用 bfcache 资格:避免使用 unload 监听器,除非必要避免使用 no-store

设计系统与令牌

  • 将设计令牌(颜色、间距、排版、圆角、阴影)定义为真实来源——绝不在组件中硬编码值
  • 使用 CSS 自定义属性 (--color-primary) 或令牌系统(Style Dictionary、Tailwind 配置)以便集中管理主题
  • 原子设计作为心智模型:原子 → 分子 → 有机体 → 模板 → 页面。不强制命名,但按此层级思考
  • 在 Storybook 中记录组件,以便隔离、发现和视觉回归测试
  • 无障碍不是可选项:WCAG 2.1 AA 最低标准。每个交互元素都需要键盘支持、焦点管理,以及在语义 HTML 不足时使用 ARIA

API 集成

  • 绝不在组件中直接调用 API。使用数据层:自定义 hooks、服务或查询库
  • 显式处理所有三种状态:加载、错误、成功——绝不假设一切顺利
  • 在变更操作中使用乐观更新以提高用户感知性能
  • 在边界处验证 API 响应(Zod、io-ts 或等效工具)——不要信任外部数据形状
  • 集中管理 API 基础 URL 和认证令牌注入——绝不在组件中分散处理

测试策略

三层方法:

  1. 单元测试:纯函数、工具函数、自定义 hooks(Jest / Vitest)
  2. 组件测试:渲染行为、用户交互、状态变更(Testing Library —— 测试行为,而非实现)
  3. 端到端测试:仅针对关键用户路径(Playwright 或 Cypress)

规则:

  • 从用户的角度测试行为,而非内部实现
  • 逻辑部分不使用快照——它们很脆弱。仅在有意进行视觉回归时使用快照
  • 旨在对业务逻辑实现高覆盖率,而非样板代码
  • 将测试文件与所测试的代码放在一起:Button.test.tsx 与 Button.tsx 相邻

代码导航(tsserver)

通用的 LSP 文本搜索工作流程在 dev-standards 技能("Code navigation")中。TypeScript 特定说明:

LSP 工具路由到 tsserver 处理 TS/TSX。单文件操作在冷启动时可靠:documentSymbol、hover、goToDefinition。

警告 —— tsserver 的索引是懒加载的(与 gopls 不同)。 针对冷服务器运行的跨文件查询(findReferences/workspaceSymbol)可能会少计数:它只了解已加载到其项目中的文件,并返回一个看似自信但不完整的结果(例如仅返回声明)。防御方法:

  • 将可疑的低引用计数视为未经验证。
  • 从使用处(导入该符号的文件)查询 findReferences,而不是单独在声明处——这会强制加载项目图。
  • 对于“此代码是否仍被使用?”的决策(死代码删除、安全重命名),请使用 grep 确认——在此处少计数很危险。

工具默认配置(2025)

  • 打包工具:Vite(新项目默认);大型企业已有配置的可继续使用 Webpack 5
  • 代码检查:ESLint + @typescript-eslint + Prettier(格式与 lint 分开)
  • 包管理器:首选 pnpm(用于 monorepo);npm 或 yarn 也可接受
  • 单仓:多包工作空间使用 Nx 或 Turborepo
  • CI:在每个 PR 上运行类型检查、lint、测试和构建。绝不允许合并失败的流水线

输出模式

在生成输出时,请遵循以下指南:

组件代码:包含类型、处理边界情况、遵循参考文件中的栈模式。在同一个响应中提供组件及其测试,除非大小不允许。

架构 / 文件结构:首先展示目录树,然后解释理由。提供意见明确的建议——给出一个好的结构,而非一组选项。

性能审计:按严重程度(严重 / 警告 / 信息)列出发现。对每个发现:内容是什么、为何重要、如何修复。

设计系统设置:先令牌结构,然后组件原语,最后文档设置。

API 集成:展示针对特定栈的数据层模式,然后展示使用该模式的组件。

测试:将测试与所测试的代码一起展示。遵循 AAA(Arrange / Act / Assert)。


辅助技能

本技能涵盖工程方面。对于视觉美学——排版选择、颜色系统、动效设计、空间构图以及避免通用的 AI 美学——请参考 frontend-design 技能。在需要两者兼顾的任务上(例如“构建一个看起来很好的仪表盘”),同时使用这两个技能:frontend-dev 负责架构和代码质量,frontend-design 负责视觉方向。

参考文件

在生成栈特定输出之前,请阅读以下文件:

  • references/typescript.md — TypeScript 严格模式、模式、常见陷阱
  • references/react.md — React 19、Next.js、hooks、状态管理、渲染策略
  • references/react-graphql.md — Relay、共置片段、React 中的 GraphQL 模式
  • references/angular.md — Angular v22、Signals、独立组件、无 Zone、NgRx

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能