Communitygithub.com

jaimegago/agent-skills

資深前端工程指導,涵蓋架構、元件設計、效能、設計系統、API 整合與測試。

agent-skills 是什麼?

這個技能提供資深等級、務實且可投入生產環境的前端工程指導。它涵蓋了從元件設計到架構審查、效能除錯、設計系統建立、API 整合以及測試策略的完整範圍。支援 React、Angular 與 TypeScript 等主流技術棧,並會根據偵測到的技術棧自動載入對應的參考文件(如 `references/react.md`)。技能的核心原則包含積極分離關注點、按功能而非類型組織程式碼、元件設計要專注單一職責、並將 Core Web Vitals 作為效能底線。輸出模式涵蓋元件程式碼、架構文件、檔案結構建議、效能審計報告等,適合任何與前端 UI 相關的開發任務。

相容平台~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(與技術棧檔案一同載入)

除非專案明確僅使用 JS,否則務必額外載入 references/typescript.md。


通用原則

無論使用何種技術棧,皆適用以下原則。請勿跳過。

架構

  • 積極分離關注點:UI 渲染、業務邏輯、資料擷取與副作用應存在於不同層級。元件不應包含 fetch 呼叫、原始 API 字串或業務規則。
  • 按功能、而非類型組織程式碼:優先採用 features/user-profile/ 結構,將元件、鉤子、測試與樣式放在一起,而非頂層的 components/、hooks/、tests/ 資料夾。根據應用程式的複雜度調整結構規模,不要為小型應用過度設計。
  • 組合優於繼承:透過組合小型、專注的元件來建構 UI。避免深層的元件繼承層級。
  • 不要過早抽象化:先重複撰寫兩次之後再進行抽象。基於單一用例的抽象通常是錯誤的。

元件設計

  • 元件應只做一件事。如果一個元件有一個以上的變更原因,請將其拆分。
  • 區分呈現型元件(純 UI,無副作用)與容器/智慧型元件(資料、邏輯、協調)。
  • Props 介面應明確且具備型別。不得使用 any、object 或 {} 作為型別。
  • 表單預設使用受控元件。

效能(不可協商的基準)

Core Web Vitals 目標(以真實使用者第 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 設定),使主題集中管理
  • 以 Atomic Design 作為心智模型:原子 → 分子 → 有機體 → 模板 → 頁面。不必強制使用這些名稱,但請以此層級思考
  • 在 Storybook 中記錄元件,以利隔離、可發現性與視覺回歸測試
  • 無障礙性不可妥協:至少符合 WCAG 2.1 AA 標準。每個互動元素都需要鍵盤支援、焦點管理,以及當語意化 HTML 不足時使用 ARIA

API 整合

  • 絕不要直接從元件呼叫 API。應使用資料層:自訂鉤子、服務或查詢函式庫
  • 明確處理所有三種狀態:載入中、錯誤、成功 — 絕不要假設一切順利
  • 在變動操作中使用樂觀更新以提升使用者感知效能
  • 在邊界處驗證 API 回應(Zod、io-ts 或同等方案)— 不要信任外部資料的結構
  • 集中管理 API 基礎 URL 與驗證權杖注入 — 絕不要分散在各元件中

測試策略

三層式方法:

  1. 單元測試:純函式、工具函式、自訂鉤子(Jest / Vitest)
  2. 元件測試:渲染行為、使用者互動、狀態變更(Testing Library — 測試行為,而非實作)
  3. 端到端測試:僅測試關鍵使用者流程(Playwright 或 Cypress)

規則:

  • 從使用者角度測試行為,而非內部實作
  • 在邏輯上不使用快照 — 它們很脆弱。僅在預期的視覺回歸測試中使用快照
  • 目標是對業務邏輯有高覆蓋率,而非樣板程式碼
  • 將測試檔案與其測試的程式碼放在一起:Button.test.tsx 與 Button.tsx 相鄰

程式碼導覽 (tsserver)

一般基於 LSP 的文字搜尋工作流程位於 dev-standards 技能(「程式碼導覽」)中。TypeScript 特定注意事項:

LSP 工具會針對 TS/TSX 路由到 tsserver。單一檔案操作在冷啟動時是可靠的:documentSymbol、hover、goToDefinition。

注意 — tsserver 會惰性建立索引(與 gopls 不同)。 對冷伺服器執行的跨檔案查詢(findReferences/workspaceSymbol)可能會少算:它只知道已載入其專案的檔案,並傳回一個看似完整但其實不完整的結果(例如僅有宣告)。防範方式:

  • 將可疑的低參考計數視為未經驗證。
  • 從使用端(有匯入該符號的檔案)查詢 findReferences,而不僅在宣告處查詢 — 這會強制載入專案圖譜。
  • 對於「這個東西還有在使用嗎?」的決策(移除死碼、安全重新命名),請使用 grep 確認 — 在此情況下少算可能很危險。

工具預設值(2025 年)

  • 打包工具:Vite(新專案預設);大型企業已使用 Webpack 5 的設定則繼續使用
  • 程式碼檢查:ESLint + @typescript-eslint + Prettier(格式化與檢查分離)
  • 套件管理器:偏好使用 pnpm 管理 monorepo;npm 或 yarn 亦可接受
  • Monorepo:Nx 或 Turborepo 用於多套件工作區
  • CI:每個 PR 都應執行型別檢查、程式碼檢查、測試與建置。絕不能合併失敗的流水線。

輸出模式

產出成果時,請遵循以下指引:

元件程式碼:包含型別、處理邊界情況、遵循參考檔案中該技術棧的模式。在空間允許的情況下,同時提供元件及其測試。

架構 / 檔案結構:先顯示目錄樹,然後解釋原因。應有明確立場 — 提供一個好的結構,而非一系列選項。

效能審計:依嚴重程度(重大 / 警告 / 資訊)列出發現。每個發現需包含:問題為何、為何重要、如何修復。

設計系統設定:先定義代碼結構,然後是基礎元件,最後是文件設定。

API 整合:展示特定技術棧的資料層模式,然後是消費該資料的元件。

測試:將測試與被測試的程式碼一起展示。遵循 AAA(安排 / 執行 / 斷言)原則。


搭配技能

此技能涵蓋工程層面。對於視覺美學 — 字體選擇、色彩系統、動態設計、空間構成以及避免常見的 AI 美學 — 請交由 frontend-design 技能處理。在需要兩者的任務上(例如「建立一個看起來很棒的儀表板」),請同時使用兩種技能:frontend-dev 負責架構與程式碼品質,frontend-design 負責視覺方向。

參考檔案

在產出特定技術棧的成果前,請先閱讀這些檔案:

  • references/typescript.md — TypeScript 嚴格模式、模式、常見陷阱
  • references/react.md — React 19、Next.js、鉤子、狀態管理、渲染策略
  • references/react-graphql.md — Relay、共置片段、React 中的 GraphQL 模式
  • references/angular.md — Angular v22、Signals、獨立元件、無 zoneless、NgRx

Individual skills in this repo

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

相關技能