@bovinphang/frontend-craft 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +7 -3
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +39 -0
- package/CHANGELOG.zh-CN.md +40 -0
- package/CONTRIBUTING.md +15 -10
- package/CONTRIBUTING.zh-CN.md +15 -10
- package/README.md +61 -39
- package/README.openclaw.md +8 -8
- package/README.openclaw.zh-CN.md +8 -8
- package/README.zh-CN.md +61 -39
- package/commands/fec-doc-sync.md +7 -6
- package/dist/bin/frontend-craft.js +30 -27
- package/docs/example-prompts.md +4 -3
- package/docs/ja-JP/README.md +61 -39
- package/docs/ko-KR/README.md +61 -39
- package/docs/runtimes/antigravity.md +1 -1
- package/docs/runtimes/augment.md +1 -1
- package/docs/runtimes/claude.md +16 -10
- package/docs/runtimes/claude.zh-CN.md +16 -10
- package/docs/runtimes/cline.md +1 -1
- package/docs/runtimes/codebuddy.md +1 -1
- package/docs/runtimes/codex.md +1 -1
- package/docs/runtimes/copilot.md +1 -1
- package/docs/runtimes/cursor.md +1 -1
- package/docs/runtimes/gemini.md +1 -1
- package/docs/runtimes/kilo.md +1 -1
- package/docs/runtimes/openclaw.md +1 -1
- package/docs/runtimes/opencode.md +1 -1
- package/docs/runtimes/qoder.md +1 -1
- package/docs/runtimes/trae.md +1 -1
- package/docs/runtimes/windsurf.md +1 -1
- package/docs/zh-CN/example-prompts.md +4 -3
- package/docs/zh-TW/README.md +61 -39
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/skills/eval_queries.json +25 -0
- package/skills/fec-accessibility-check/SKILL.md +1 -1
- package/skills/fec-alchemy/SKILL.md +74 -0
- package/skills/fec-alchemy/assets/absorption-plan-template.md +47 -0
- package/skills/fec-alchemy/assets/intake-template.md +55 -0
- package/skills/fec-alchemy/assets/review-checklist.md +31 -0
- package/skills/fec-alchemy/references/methodology.md +94 -0
- package/skills/fec-alchemy/references/originality-and-licensing.md +57 -0
- package/skills/fec-browser-storage/SKILL.md +1 -1
- package/skills/fec-canvas-threejs/SKILL.md +1 -1
- package/skills/fec-code-review/SKILL.md +10 -2
- package/skills/fec-data-fetching/SKILL.md +15 -15
- package/skills/fec-data-fetching/references/query-patterns.md +27 -1
- package/skills/fec-debug-framework/SKILL.md +14 -19
- package/skills/fec-debug-framework/references/report-template.md +58 -0
- package/skills/fec-doc-sync/SKILL.md +19 -17
- package/skills/fec-e2e-testing/SKILL.md +3 -3
- package/skills/fec-form-handling/SKILL.md +11 -11
- package/skills/fec-form-handling/references/advanced-form-patterns.md +34 -5
- package/skills/fec-implement-from-design/SKILL.md +2 -2
- package/skills/fec-legacy-to-modern-migration/SKILL.md +33 -23
- package/skills/fec-legacy-web-standard/SKILL.md +1 -1
- package/skills/fec-list-virtualization/SKILL.md +3 -3
- package/skills/fec-list-virtualization/references/virtualization-patterns.md +32 -4
- package/skills/fec-performance-optimization/SKILL.md +5 -1
- package/skills/fec-performance-optimization/references/report-template.md +53 -0
- package/skills/fec-pwa-implementation/SKILL.md +3 -4
- package/skills/fec-react-project-standard/SKILL.md +1 -1
- package/skills/fec-refactor-clean/SKILL.md +4 -1
- package/skills/fec-refactor-clean/references/report-template.md +42 -0
- package/skills/fec-security-review/SKILL.md +3 -3
- package/skills/fec-state-management/SKILL.md +1 -1
- package/skills/fec-storybook-component-doc/SKILL.md +2 -2
- package/skills/fec-typescript-type-safety/SKILL.md +1 -1
- package/skills/fec-validation-fix/SKILL.md +5 -2
- package/skills/fec-validation-fix/references/report-template.md +43 -0
- package/skills/fec-vue3-project-standard/SKILL.md +1 -1
- package/skills/fec-web-workers/SKILL.md +3 -4
- package/skills/metadata.json +82 -45
- package/skills/relations.json +20 -0
- package/docs/superpowers/plans/2026-05-29-fec-debug.md +0 -491
- package/docs/superpowers/specs/2026-05-29-fec-debug-design.md +0 -340
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
# 高级表单模式
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 先判断是否需要表单库
|
|
4
|
+
|
|
5
|
+
- 1-3 个字段、无复杂校验、无动态字段、无组件库适配压力的表单,可用框架原生状态、浏览器约束校验和轻量提交状态。
|
|
6
|
+
- 需要动态字段、跨字段校验、多步流程、文件上传、异步校验、服务端错误回填或明显输入卡顿时,再引入专门表单方案。
|
|
7
|
+
- 表单库只管理字段状态和校验流程,不替代 API 错误映射、权限判断、可访问性标注或服务端最终校验。
|
|
8
|
+
|
|
9
|
+
## 选型参考
|
|
10
|
+
|
|
11
|
+
先沿用项目已有表单库、schema 库和组件库适配方式;新增依赖时再按场景选择。
|
|
12
|
+
|
|
13
|
+
| 场景 | 候选方案 | 注意点 |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| React 复杂表单 | React Hook Form + Zod | 非受控优先,第三方受控组件用 `Controller`。 |
|
|
16
|
+
| Vue 复杂表单 | vee-validate / FormKit + Zod、Yup 或 Valibot | 不要为 Vue 项目引入 React-only 表单 API;优先沿用项目既有 Vue 表单库。 |
|
|
17
|
+
| 简单表单 | 框架原生状态 + 基础校验 | 避免为了 1-3 个字段引入重型表单体系。 |
|
|
18
|
+
| 多步表单 | 分步 schema + 最终提交 schema | 明确跨步数据保存、返回上一步和最终校验策略。 |
|
|
19
|
+
| 文件上传 | 表单库字段状态 + `FormData` | 校验文件数量、大小、类型;不要把 `File` JSON 序列化。 |
|
|
20
|
+
| 异步校验 | 提交边界校验或 debounce 字段校验 | 避免每次键入请求;处理竞态和旧响应覆盖。 |
|
|
21
|
+
|
|
22
|
+
## 通用实现原则
|
|
23
|
+
|
|
24
|
+
- 运行时 schema 或校验函数负责外部输入边界;TypeScript 类型不能替代运行时校验。
|
|
25
|
+
- 默认值、reset 数据和服务端回填数据要形状一致,避免字段在受控/非受控之间切换。
|
|
26
|
+
- 字段错误要能映射到具体字段;全局错误用于提交失败、权限或服务不可用等非字段问题。
|
|
27
|
+
- 组件库适配层要透传 value、onChange、onBlur、name/ref 或等价字段注册能力。
|
|
28
|
+
- 提交时保护 loading、重复提交、取消/过期请求、服务端错误回填和成功后 reset。
|
|
29
|
+
- 文件上传使用 `FormData` 或直传流程,前端校验只做体验保护,服务端仍需最终校验。
|
|
30
|
+
- 性能优化优先使用字段级订阅、局部组件拆分和延迟校验,不要全表单 watch 后驱动整页重渲染。
|
|
31
|
+
|
|
32
|
+
## React Hook Form Controller
|
|
4
33
|
|
|
5
34
|
```tsx
|
|
6
35
|
<Controller
|
|
@@ -18,7 +47,7 @@
|
|
|
18
47
|
|
|
19
48
|
用于不暴露原生 `ref` 的 Select、DatePicker、RichEditor 等组件。
|
|
20
49
|
|
|
21
|
-
## 动态字段
|
|
50
|
+
## React Hook Form 动态字段
|
|
22
51
|
|
|
23
52
|
```tsx
|
|
24
53
|
const { fields, append, remove } = useFieldArray({
|
|
@@ -36,7 +65,7 @@ const { fields, append, remove } = useFieldArray({
|
|
|
36
65
|
|
|
37
66
|
`key` 必须使用 `field.id`,不要使用数组 index。
|
|
38
67
|
|
|
39
|
-
## 联动校验
|
|
68
|
+
## Zod 联动校验
|
|
40
69
|
|
|
41
70
|
```ts
|
|
42
71
|
const schema = z
|
|
@@ -50,7 +79,7 @@ const schema = z
|
|
|
50
79
|
});
|
|
51
80
|
```
|
|
52
81
|
|
|
53
|
-
##
|
|
82
|
+
## Zod 文件上传校验
|
|
54
83
|
|
|
55
84
|
```ts
|
|
56
85
|
const schema = z.object({
|
|
@@ -67,6 +96,6 @@ const schema = z.object({
|
|
|
67
96
|
## 性能
|
|
68
97
|
|
|
69
98
|
- 用 `useWatch` 或字段级订阅替代全表单 watch。
|
|
70
|
-
- 大表单拆成 memoized
|
|
99
|
+
- 大表单拆成 memoized 子组件或框架等价的局部更新单元。
|
|
71
100
|
- 高频输入不要每次键入触发网络校验。
|
|
72
101
|
- 多步表单要明确每步 schema 和跨步最终 schema。
|
|
@@ -28,7 +28,7 @@ description: Use when implementing UI from Figma, Sketch, MasterGo, Pixso, Modao
|
|
|
28
28
|
- 保持实现结果可维护、类型明确、可测试且具备可访问性
|
|
29
29
|
- 避免引入重复的基础组件或并行设计系统
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## Procedure
|
|
32
32
|
|
|
33
33
|
### 1. 识别设计来源
|
|
34
34
|
|
|
@@ -102,7 +102,7 @@ description: Use when implementing UI from Figma, Sketch, MasterGo, Pixso, Modao
|
|
|
102
102
|
- 如有测试,执行测试
|
|
103
103
|
- 如果缺少测试,说明建议补充的最小测试范围
|
|
104
104
|
|
|
105
|
-
##
|
|
105
|
+
## 详细参考
|
|
106
106
|
|
|
107
107
|
撰写实现计划报告时,加载 [references/design-plan-template.md](references/design-plan-template.md)。
|
|
108
108
|
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: fec-legacy-to-modern-migration
|
|
3
|
-
description: Use when planning or implementing an intentional migration from JavaScript, jQuery, HTML/CSS, server-rendered templates,
|
|
3
|
+
description: Use when planning or implementing an intentional migration from JavaScript, jQuery, HTML/CSS, server-rendered templates, MPA legacy frontend code, or older framework code toward a modern frontend stack while preserving behavior. Do not use for routine legacy bug fixes that stay in the old stack; Chinese triggers include 遗留项目, 技术栈升级, jQuery 迁移.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 传统前端到现代框架迁移
|
|
7
7
|
|
|
8
|
-
适用于将 JavaScript + jQuery + HTML/CSS 多页面应用(MPA
|
|
8
|
+
适用于将 JavaScript + jQuery + HTML/CSS 多页面应用(MPA)、服务端模板渲染项目或旧框架代码,渐进迁移到 React、Vue、Next.js、Nuxt、TypeScript,或保留 MPA 形态但现代化模块、构建、类型和测试的场景。
|
|
9
9
|
|
|
10
10
|
## Purpose
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
指导传统前端项目渐进迁移到目标现代栈,提供迁移策略、概念映射、分阶段步骤和实施约束,确保功能等价和风险可控。
|
|
13
|
+
|
|
14
|
+
## Procedure
|
|
15
|
+
|
|
16
|
+
1. 先识别目标栈、迁移边界和是否保留 MPA/服务端模板形态。
|
|
17
|
+
2. 选择渐进式或一次性重写策略,并输出迁移分析报告。
|
|
18
|
+
3. 做存量盘点、依赖关系分析和迁移优先级排序。
|
|
19
|
+
4. 按准备、基础层、模块/页面迁移、收尾的顺序推进,每次迁移一个可验证单元。
|
|
20
|
+
5. 每个迁移单元按检查清单验证功能等价、视觉一致、类型安全、可访问性、i18n、资源和样式边界。
|
|
13
21
|
|
|
14
22
|
## 迁移策略选择
|
|
15
23
|
|
|
@@ -28,8 +36,8 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
28
36
|
| ------------------------------------------ | -------------------------------------- |
|
|
29
37
|
| `$(selector).html(content)` | 声明式 JSX + state 驱动渲染 |
|
|
30
38
|
| `$(document).on('click', '.btn', handler)` | `onClick` + 事件委托由 React 处理 |
|
|
31
|
-
| `$.ajax()` / `$.get()` |
|
|
32
|
-
| 全局变量 / 命名空间存储状态 |
|
|
39
|
+
| `$.ajax()` / `$.get()` | 项目请求层、`fetch` / `axios`,可按需接 TanStack Query 或 SWR |
|
|
40
|
+
| 全局变量 / 命名空间存储状态 | 局部 state、Context 或项目既有 store,可按需使用 Zustand/Redux |
|
|
33
41
|
| `$(el).show()` / `$(el).hide()` | 条件渲染 `{visible && <Component />}` |
|
|
34
42
|
| 手动 DOM 操作 `append` / `remove` | 数据驱动,通过 setState 触发重渲染 |
|
|
35
43
|
| 模板字符串拼接 HTML | JSX 组件 + props |
|
|
@@ -41,7 +49,7 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
41
49
|
| ------------------------------------------ | -------------------------------------------------- |
|
|
42
50
|
| `$(selector).html(content)` | 模板 + `ref` / `reactive` 驱动渲染 |
|
|
43
51
|
| `$(document).on('click', '.btn', handler)` | `@click` + 事件修饰符 |
|
|
44
|
-
| `$.ajax()` / `$.get()` |
|
|
52
|
+
| `$.ajax()` / `$.get()` | 项目请求层、`fetch` / `axios`,可按需接 VueUse、Nuxt `useFetch` 或 TanStack Query Vue adapter |
|
|
45
53
|
| 全局变量 / 命名空间存储状态 | `ref` / `reactive` / Pinia |
|
|
46
54
|
| `$(el).show()` / `$(el).hide()` | `v-show` / `v-if` |
|
|
47
55
|
| 手动 DOM 操作 | 数据驱动,通过响应式更新视图 |
|
|
@@ -52,10 +60,10 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
52
60
|
|
|
53
61
|
| 遗留概念 | 现代对应 |
|
|
54
62
|
| --------------------------------- | ------------------------------------------ |
|
|
55
|
-
| 页面级 JS 入口(每页一个 script) |
|
|
63
|
+
| 页面级 JS 入口(每页一个 script) | 路由/页面入口 + 懒加载模块,或保留 MPA 入口并现代化打包 |
|
|
56
64
|
| 公共 JS 模块(utils、ajax 封装) | `services/`、`utils/`、类型化 API 层 |
|
|
57
|
-
| 内联样式 / 页面级 CSS | CSS Modules
|
|
58
|
-
| 服务端模板变量 | 通过 API
|
|
65
|
+
| 内联样式 / 页面级 CSS | 目标项目样式体系,如 CSS Modules、Tailwind、全局样式分层或组件库样式 |
|
|
66
|
+
| 服务端模板变量 | 通过 API 获取、SSR/loader 注入,或保留服务端模板边界并类型化数据 |
|
|
59
67
|
| 表单提交 + 整页刷新 | 表单库 + 客户端校验 + API 调用 |
|
|
60
68
|
|
|
61
69
|
## 迁移前分析
|
|
@@ -66,7 +74,8 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
66
74
|
- 页面数量、功能模块数量
|
|
67
75
|
- 依赖的 jQuery 插件及替代方案(如 DataTables → TanStack Table)
|
|
68
76
|
- 现有 API 调用方式、是否有统一封装
|
|
69
|
-
- 是否有服务端模板(JSP/Thymeleaf/EJS
|
|
77
|
+
- 是否有服务端模板(JSP/Thymeleaf/EJS 等)需要保留、局部替换或改为纯前端渲染
|
|
78
|
+
- 目标栈是 React/Vue/Next/Nuxt、现代 MPA,还是只做局部 TypeScript/构建/测试现代化
|
|
70
79
|
|
|
71
80
|
2. **依赖关系**
|
|
72
81
|
- 页面间共享的 JS/CSS 模块
|
|
@@ -82,7 +91,7 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
82
91
|
|
|
83
92
|
### 阶段 0:准备
|
|
84
93
|
|
|
85
|
-
-
|
|
94
|
+
- 搭建或识别目标项目骨架:React/Vue/Next/Nuxt、现代 MPA,或现有项目内的渐进式 TypeScript/构建入口
|
|
86
95
|
- 配置 ESLint、Prettier、测试框架
|
|
87
96
|
- 建立 `services/request.ts` 统一请求层,与现有 API 兼容
|
|
88
97
|
- 将遗留项目中的 `utils`、`constants` 逐步迁移并补充类型
|
|
@@ -92,7 +101,7 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
92
101
|
- 迁移并类型化 API 调用(`$.ajax` → `axios`/`fetch`)
|
|
93
102
|
- 迁移工具函数(日期、格式化、校验等)
|
|
94
103
|
- 迁移常量、枚举、类型定义
|
|
95
|
-
-
|
|
104
|
+
- 建立目标导航/页面入口骨架;未迁移页面可继续走旧路由、重定向、iframe 或微前端嵌入
|
|
96
105
|
|
|
97
106
|
### 阶段 2:按模块/页面迁移
|
|
98
107
|
|
|
@@ -103,7 +112,7 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
103
112
|
|
|
104
113
|
### 阶段 3:收尾
|
|
105
114
|
|
|
106
|
-
-
|
|
115
|
+
- 按迁移策略移除或冻结旧代码入口;若保留 MPA,则收敛旧入口并完成现代化边界
|
|
107
116
|
- 配置 404、错误边界、全局错误处理
|
|
108
117
|
- 性能优化(懒加载、代码分割、缓存策略)
|
|
109
118
|
- 文档更新、部署流程调整
|
|
@@ -115,8 +124,8 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
115
124
|
### 图片与图标
|
|
116
125
|
|
|
117
126
|
- 直接使用原项目的图片资源路径,不重新托管或替换
|
|
118
|
-
- 可使用 SVG 图片(`<img src="*.svg" />` 或 CSS `background-image
|
|
119
|
-
-
|
|
127
|
+
- 可使用 SVG 图片(`<img src="*.svg" />` 或 CSS `background-image`);图标组件或可访问交互确需内联 SVG 时,应遵循目标项目图标规范并说明理由。
|
|
128
|
+
- 若原项目使用了 iconfont 或 IcoMoon 图标,重构时优先继续使用,保持图标体系一致;替换为其他图标方案前需评估视觉一致性、包体和维护成本。
|
|
120
129
|
- 图标优先使用原项目已有的图标文件(iconfont / IcoMoon / 已有 SVG),必要时可引入 SVG 文件作为独立资源
|
|
121
130
|
|
|
122
131
|
### 国际化(i18n)
|
|
@@ -130,7 +139,7 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
130
139
|
- 布局样式对齐原项目视觉效果,但**只参考原项目效果,不照搬其 CSS**
|
|
131
140
|
- 优先使用 **flex 弹性布局**,避免 `float`、复杂 `position`、冗余嵌套
|
|
132
141
|
- 避免不合理写法:如 `!important` 滥用、过深选择器、重复定义
|
|
133
|
-
-
|
|
142
|
+
- 组件中优先避免内联样式(`style={{ ... }}` / `style="..."`);确需使用运行时动态值、第三方组件 API 或 CSS 变量桥接时,应保持局部、可解释,并优先放入目标项目样式体系。
|
|
134
143
|
|
|
135
144
|
### 目标
|
|
136
145
|
|
|
@@ -149,9 +158,9 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
149
158
|
- [ ] 可访问性:表单有 label、交互可键盘操作
|
|
150
159
|
- [ ] 无 XSS 风险(用户输入已转义或使用安全 API)
|
|
151
160
|
- [ ] 关键路径有测试覆盖
|
|
152
|
-
- [ ]
|
|
153
|
-
- [ ]
|
|
154
|
-
- [ ] 样式参考原项目效果但不照搬 CSS
|
|
161
|
+
- [ ] 符合目标栈的项目规范(React / Vue / Next / Nuxt / MPA 现代化等)
|
|
162
|
+
- [ ] 图片使用原项目资源;图标体系优先沿用原项目或目标项目规范,例外已说明
|
|
163
|
+
- [ ] 样式参考原项目效果但不照搬 CSS,优先使用目标项目样式体系,内联样式例外已说明
|
|
155
164
|
- [ ] 视觉与交互与原项目一致,代码更简洁易维护
|
|
156
165
|
- [ ] 新代码路径文案已 i18n;遗留层未扩大硬编码;locales 检索与多语言同步已完成(参见 i18n 规则迁移补充清单)
|
|
157
166
|
|
|
@@ -162,11 +171,12 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
162
171
|
- 优先保证功能等价,再考虑优化和现代化
|
|
163
172
|
- 迁移过程中保持旧系统可运行,避免大爆炸式上线
|
|
164
173
|
- 遇到 jQuery 插件无现成替代时,可暂时用 iframe 或微前端方式嵌入,待后续替换
|
|
165
|
-
-
|
|
166
|
-
-
|
|
174
|
+
- **目标栈**:先识别 React/Vue/Next/Nuxt、现代 MPA 或局部现代化目标,不默认强制改成 SPA。
|
|
175
|
+
- **图片与图标**:使用原项目图片资源,图标体系优先沿用原项目或目标项目规范;内联 SVG 例外需有可访问性、组件化或维护理由。
|
|
176
|
+
- **样式**:参考原项目效果不照搬 CSS,优先使用目标项目样式体系;内联样式例外需局部、可解释。
|
|
167
177
|
- **目标**:视觉与交互一致、代码更简洁易维护,业务功能不得缺失
|
|
168
178
|
|
|
169
|
-
##
|
|
179
|
+
## 详细参考
|
|
170
180
|
|
|
171
181
|
撰写迁移分析或迁移计划报告时,加载 [references/migration-report-template.md](references/migration-report-template.md)。
|
|
172
182
|
|
|
@@ -176,5 +186,5 @@ description: Use when planning or implementing an intentional migration from Jav
|
|
|
176
186
|
- 迁移后的业务功能与原项目完全等价,无功能缺失
|
|
177
187
|
- 视觉与交互与原项目一致,用户无感知差异
|
|
178
188
|
- 类型定义完整,无 `any` 滥用,API 调用统一且类型安全
|
|
179
|
-
-
|
|
189
|
+
- 图片使用原项目资源,样式进入目标项目样式体系,图标和内联样式例外有明确理由
|
|
180
190
|
- 新代码文案已 i18n,关键路径有测试覆盖
|
|
@@ -18,7 +18,7 @@ description: Use when maintaining or safely modifying existing non-framework fro
|
|
|
18
18
|
5. HTML/CSS 保持语义、label、alt、BEM/既有命名和低选择器深度。
|
|
19
19
|
6. 安全重点检查 `.html()`、`innerHTML`、URL 参数渲染、CSRF token 和文件上传。
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## 详细参考
|
|
22
22
|
|
|
23
23
|
涉及 jQuery 命名空间、事件绑定、Ajax、XSS 转义、文件组织和维护清单示例时,加载 [references/legacy-patterns.md](references/legacy-patterns.md)。
|
|
24
24
|
|
|
@@ -12,14 +12,14 @@ description: Use when optimizing or reviewing large lists, virtual scrolling, wi
|
|
|
12
12
|
## Procedure
|
|
13
13
|
|
|
14
14
|
1. 先确认列表规模和瓶颈:500+ 项、滚动掉帧、DOM 节点过多或内存飙升才引入虚拟化。
|
|
15
|
-
2.
|
|
15
|
+
2. 先遵循项目现有框架、依赖和设计系统约束,再按场景选库:React 可考虑 `react-window` 或 TanStack Virtual;Vue/Solid/Svelte、动态测量、网格或跨框架场景优先考虑 TanStack Virtual;遗留 `react-virtualized` 只维护不新增。
|
|
16
16
|
3. 明确 item size、overscan、容器高度、key、滚动容器和 resize 行为。
|
|
17
17
|
4. 无限滚动时分离数据分页和 DOM 虚拟化;数据获取可联用数据获取 workflow。
|
|
18
18
|
5. 验证 DOM 节点数、滚动 FPS、键盘/屏幕阅读器体验和 Ctrl+F/SEO 限制。
|
|
19
19
|
|
|
20
|
-
##
|
|
20
|
+
## 详细参考
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
涉及是否需要虚拟化、库选型、固定高度、可变/动态高度、无限滚动、网格虚拟化和性能注意事项时,加载 [references/virtualization-patterns.md](references/virtualization-patterns.md)。
|
|
23
23
|
|
|
24
24
|
## Constraints
|
|
25
25
|
|
|
@@ -1,6 +1,34 @@
|
|
|
1
1
|
# 虚拟列表模式
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 先判断是否需要虚拟化
|
|
4
|
+
|
|
5
|
+
- 只有列表规模、渲染成本或滚动性能已经形成瓶颈时才引入虚拟化;小列表、轻量静态列表和分页后可控的列表不需要。
|
|
6
|
+
- SEO 关键内容、依赖浏览器原生 Ctrl+F 的全文内容、需要一次性打印/导出的内容,不要只存在于虚拟项中。
|
|
7
|
+
- 虚拟化只减少 DOM 渲染成本,不替代数据分页、接口缓存、图片懒加载或复杂行组件的渲染优化。
|
|
8
|
+
|
|
9
|
+
## 选型参考
|
|
10
|
+
|
|
11
|
+
先沿用项目已有虚拟列表库和框架约定;新增依赖时再按场景选择。
|
|
12
|
+
|
|
13
|
+
| 场景 | 候选方案 | 注意点 |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| React 固定高度列表 | `react-window` 或 TanStack Virtual | `react-window` 轻量稳定;TanStack Virtual 更适合统一复杂场景。 |
|
|
16
|
+
| React 可变高度列表 | `react-window` 的 `VariableSizeList` 或 TanStack Virtual | 高度可计算时两者都可用;内容真实高度会变化时需要测量和重置。 |
|
|
17
|
+
| 动态测量、聊天流、展开行 | TanStack Virtual | 配合 `measureElement` / ResizeObserver,处理布局抖动和滚动锚点。 |
|
|
18
|
+
| Vue / Solid / Svelte / 跨框架 | TanStack Virtual 或项目既有生态库 | 不要为非 React 项目引入 React-only 虚拟列表库。 |
|
|
19
|
+
| 二维网格、表格、列虚拟化 | TanStack Virtual row/column 双轴方案或现有表格库虚拟化能力 | 固定列、粘性表头和键盘导航需要单独验证。 |
|
|
20
|
+
| 遗留 `react-virtualized` 项目 | 维护现有实现 | 不建议新功能继续扩散;大改时评估迁移成本。 |
|
|
21
|
+
|
|
22
|
+
## 通用实现原则
|
|
23
|
+
|
|
24
|
+
- 容器高度必须稳定,滚动容器必须明确,item key 必须来自稳定业务标识。
|
|
25
|
+
- 行根元素必须透传虚拟库提供的 `style`、定位属性和测量 ref。
|
|
26
|
+
- `overscan` 按设备和行渲染成本调节:过小会白屏,过大会接近全量渲染。
|
|
27
|
+
- 动态高度需要估算高度、真实测量、resize 更新和滚动锚点策略。
|
|
28
|
+
- 无限滚动要分离“数据分页”和“DOM 虚拟化”;不要在 render 阶段无条件触发请求。
|
|
29
|
+
- 验证键盘导航、屏幕阅读器语义、焦点保持、滚动恢复、空态/加载态和错误态。
|
|
30
|
+
|
|
31
|
+
## React 固定高度示例
|
|
4
32
|
|
|
5
33
|
```tsx
|
|
6
34
|
import { FixedSizeList as List } from "react-window";
|
|
@@ -16,7 +44,7 @@ export const UserList = ({ users }: { users: User[] }) => (
|
|
|
16
44
|
);
|
|
17
45
|
```
|
|
18
46
|
|
|
19
|
-
##
|
|
47
|
+
## React 可变高度示例
|
|
20
48
|
|
|
21
49
|
```tsx
|
|
22
50
|
import { VariableSizeList as List } from "react-window";
|
|
@@ -28,7 +56,7 @@ const getItemSize = (index: number) => (items[index].hasSummary ? 120 : 60);
|
|
|
28
56
|
</List>;
|
|
29
57
|
```
|
|
30
58
|
|
|
31
|
-
##
|
|
59
|
+
## TanStack Virtual 动态高度示例
|
|
32
60
|
|
|
33
61
|
```tsx
|
|
34
62
|
const virtualizer = useVirtualizer({
|
|
@@ -39,7 +67,7 @@ const virtualizer = useVirtualizer({
|
|
|
39
67
|
});
|
|
40
68
|
```
|
|
41
69
|
|
|
42
|
-
动态内容需要测量元素并处理 ResizeObserver
|
|
70
|
+
动态内容需要测量元素并处理 ResizeObserver;Vue/Solid/Svelte 项目使用 TanStack Virtual 对应框架 adapter,核心选项保持一致。
|
|
43
71
|
|
|
44
72
|
## 无限滚动
|
|
45
73
|
|
|
@@ -67,6 +67,10 @@ description: Use when diagnosing or improving frontend performance, Core Web Vit
|
|
|
67
67
|
- 不引入大型新依赖解决小问题;先利用项目已有工具和浏览器能力。
|
|
68
68
|
- 不把后端、网络和浏览器侧问题混为一谈;前端能验证的部分要单独列证据。
|
|
69
69
|
|
|
70
|
+
## 详细参考
|
|
71
|
+
|
|
72
|
+
撰写性能分析报告时,加载 [references/report-template.md](references/report-template.md)。
|
|
73
|
+
|
|
70
74
|
## Expected Output
|
|
71
75
|
|
|
72
|
-
|
|
76
|
+
输出有证据链的性能分析报告,说明基线、瓶颈、优化建议、验证方式和剩余风险。报告保存为 `reports/performance-review-YYYY-MM-DD-HHmmss.md`。
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# 性能分析报告模板
|
|
2
|
+
|
|
3
|
+
```markdown
|
|
4
|
+
# 前端性能分析报告
|
|
5
|
+
|
|
6
|
+
> 生成时间: YYYY-MM-DD HH:mm
|
|
7
|
+
> 目标页面/流程: ...
|
|
8
|
+
> 环境: 设备、浏览器、网络、分支或版本
|
|
9
|
+
|
|
10
|
+
## 性能目标
|
|
11
|
+
|
|
12
|
+
- 关注指标: LCP / CLS / INP / TBT / bundle size / memory / FPS
|
|
13
|
+
- 项目预算或目标阈值
|
|
14
|
+
- 用户主路径和 P95 场景
|
|
15
|
+
|
|
16
|
+
## 基线数据
|
|
17
|
+
|
|
18
|
+
| 指标 | 当前值 | 采集方式 | 备注 |
|
|
19
|
+
| --- | --- | --- | --- |
|
|
20
|
+
| LCP | ... | Lighthouse / RUM / trace | ... |
|
|
21
|
+
|
|
22
|
+
## 瓶颈定位
|
|
23
|
+
|
|
24
|
+
- 加载层、渲染层、数据层、主线程或资源层问题
|
|
25
|
+
- 关联文件、路由、chunk、组件或请求
|
|
26
|
+
- 支持该判断的 trace、bundle、日志或截图证据
|
|
27
|
+
|
|
28
|
+
## 优先级
|
|
29
|
+
|
|
30
|
+
| 优先级 | 问题 | 用户影响 | 风险 |
|
|
31
|
+
| --- | --- | --- | --- |
|
|
32
|
+
| P0 / P1 / P2 | ... | ... | ... |
|
|
33
|
+
|
|
34
|
+
## 优化方案
|
|
35
|
+
|
|
36
|
+
- 具体改法
|
|
37
|
+
- 替代方案
|
|
38
|
+
- 可维护性、可访问性和产品行为影响
|
|
39
|
+
|
|
40
|
+
## 验证对比
|
|
41
|
+
|
|
42
|
+
| 指标 | 优化前 | 优化后 | 采集方式 |
|
|
43
|
+
| --- | --- | --- | --- |
|
|
44
|
+
| ... | ... | ... | ... |
|
|
45
|
+
|
|
46
|
+
## 剩余风险
|
|
47
|
+
|
|
48
|
+
- 未覆盖设备、网络或浏览器
|
|
49
|
+
- 需要后端、设计、产品或基础设施协作的部分
|
|
50
|
+
- 建议监控或后续任务
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
分析完成后,将报告保存到 `reports/performance-review-YYYY-MM-DD-HHmmss.md`,并告知用户报告路径。
|
|
@@ -17,10 +17,10 @@ description: Use when adding or reviewing Progressive Web App capabilities such
|
|
|
17
17
|
4. 用 Workbox 或框架插件管理 precache/runtime cache;登录、支付、权限变更等敏感请求必须走网络。
|
|
18
18
|
5. 提供 offline fallback 页面和安装提示 UI,并验证首次加载、离线访问、更新激活、卸载重装。
|
|
19
19
|
|
|
20
|
-
##
|
|
20
|
+
## 详细参考
|
|
21
21
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
22
|
+
- 需要 manifest 字段、HTML 引用、图标要求、截图和 iOS 注意事项时,加载 [references/manifest-and-icons.md](references/manifest-and-icons.md)。
|
|
23
|
+
- 需要 Service Worker 注册、Workbox 策略、Vite 集成、离线兜底和更新流程时,加载 [references/service-worker-workbox.md](references/service-worker-workbox.md)。
|
|
24
24
|
|
|
25
25
|
## Constraints
|
|
26
26
|
|
|
@@ -33,4 +33,3 @@ description: Use when adding or reviewing Progressive Web App capabilities such
|
|
|
33
33
|
## Expected Output
|
|
34
34
|
|
|
35
35
|
产出可安装的 Web 应用、离线 fallback、可见更新提示和明确缓存策略。验证 Lighthouse PWA、DevTools Application 面板、离线模式、更新发布和移动端安装流程。
|
|
36
|
-
|
|
@@ -50,7 +50,7 @@ description: Use when designing or reviewing React + TypeScript project structur
|
|
|
50
50
|
- 页面级 Error Boundary、模块级 fallback、API 错误映射和用户可恢复动作是否一致
|
|
51
51
|
- Tailwind token/variant 或响应式布局需求是否应分流到对应专项 skill
|
|
52
52
|
|
|
53
|
-
##
|
|
53
|
+
## 详细参考
|
|
54
54
|
|
|
55
55
|
需要具体 React 项目结构、组件模式、Hooks、路由、状态归属、API 层形状、错误处理、样式默认值、TypeScript 约定或审查清单时,加载 [references/react-project-details.md](references/react-project-details.md)。
|
|
56
56
|
|
|
@@ -41,8 +41,11 @@ description: Use when safely removing dead frontend code, unused exports, stale
|
|
|
41
41
|
- 不用“看起来没人用”作为证据;必须有搜索、工具输出、类型错误消失或测试保护。
|
|
42
42
|
- 不把依赖大版本升级伪装成清理;升级风险、release notes 和 lockfile 变更应分流到依赖升级工作流。
|
|
43
43
|
|
|
44
|
+
## 详细参考
|
|
45
|
+
|
|
46
|
+
撰写清理报告时,加载 [references/report-template.md](references/report-template.md)。
|
|
47
|
+
|
|
44
48
|
## Expected Output
|
|
45
49
|
|
|
46
50
|
- 清理报告保存为 `reports/refactor-clean-YYYY-MM-DD-HHmmss.md`。
|
|
47
|
-
- 报告包含候选项、风险分类、已清理项、跳过原因、运行命令和剩余风险。
|
|
48
51
|
- 代码清理后相关验证命令通过,或明确说明阻塞原因。
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# 重构清理报告模板
|
|
2
|
+
|
|
3
|
+
```markdown
|
|
4
|
+
# 重构清理报告
|
|
5
|
+
|
|
6
|
+
> 生成时间: YYYY-MM-DD HH:mm
|
|
7
|
+
> 清理范围: 文件 / 模块 / 依赖 / 路由 / 样式
|
|
8
|
+
|
|
9
|
+
## 基线验证
|
|
10
|
+
|
|
11
|
+
| 命令 | 清理前状态 | 清理后状态 | 备注 |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| `npm run lint` | 失败 / 通过 / 未运行 | 失败 / 通过 / 未运行 | ... |
|
|
14
|
+
|
|
15
|
+
## 候选项与证据
|
|
16
|
+
|
|
17
|
+
| 候选项 | 证据 | 风险分类 |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `path/to/file.ts` | 工具输出 / rg 搜索 / 类型检查 | SAFE / CAUTION / DANGER / UPGRADE |
|
|
20
|
+
|
|
21
|
+
## 已清理项
|
|
22
|
+
|
|
23
|
+
- 删除或修改的文件、导出、样式、依赖或配置
|
|
24
|
+
- 每项清理对应的证据
|
|
25
|
+
|
|
26
|
+
## 跳过原因
|
|
27
|
+
|
|
28
|
+
- CAUTION / DANGER 项为什么没有自动处理
|
|
29
|
+
- 需要人工确认、运行时验证或专项流程的内容
|
|
30
|
+
|
|
31
|
+
## 验证命令
|
|
32
|
+
|
|
33
|
+
- 执行的 lint、type-check、test、build 或手工验证
|
|
34
|
+
- 关键输出摘要
|
|
35
|
+
|
|
36
|
+
## 剩余风险
|
|
37
|
+
|
|
38
|
+
- 动态引用、运行时模板、插件元数据或外部入口风险
|
|
39
|
+
- 建议后续清理或依赖升级项
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
清理完成后,将报告保存到 `reports/refactor-clean-YYYY-MM-DD-HHmmss.md`,并告知用户报告路径。
|
|
@@ -18,10 +18,10 @@ description: Use when reviewing frontend security risks such as XSS, CSRF, sensi
|
|
|
18
18
|
5. 高危问题标记为阻塞合并;前端校验只能改善体验,不能作为唯一安全边界。
|
|
19
19
|
6. 输出分级安全报告;报告格式见 [references/report-template.md](references/report-template.md)。
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## 详细参考
|
|
22
22
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
23
|
+
- 需要 XSS、CSP、敏感数据、CSRF、依赖和输入校验细节时,加载 [references/security-checklist.md](references/security-checklist.md)。
|
|
24
|
+
- 撰写安全审查报告时,加载 [references/report-template.md](references/report-template.md)。
|
|
25
25
|
|
|
26
26
|
## Constraints
|
|
27
27
|
|
|
@@ -18,9 +18,9 @@ description: Use when setting up or reviewing Storybook component documentation,
|
|
|
18
18
|
5. 需要自动化时接入 interaction tests、addon-a11y、Chromatic 或 Storybook Test Runner;这些能力服务于组件文档和设计系统展示,不承接跨页业务旅程。
|
|
19
19
|
6. 设计系统组件应记录 token 来源、Tailwind/class 变体、暗色模式、响应式尺寸和不支持的组合,避免消费者靠猜测拼装。
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## 详细参考
|
|
22
22
|
|
|
23
|
-
-
|
|
23
|
+
- 需要 `main.ts`、`preview.ts`、stories、decorators、MDX、交互测试和视觉回归示例时,加载 [references/story-patterns.md](references/story-patterns.md)。
|
|
24
24
|
|
|
25
25
|
## Constraints
|
|
26
26
|
|
|
@@ -140,7 +140,7 @@ type UserStatus = UserViewModel["status"];
|
|
|
140
140
|
type _UserStatusTest = Expect<Equal<UserStatus, "active" | "disabled">>;
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
##
|
|
143
|
+
## 详细参考
|
|
144
144
|
|
|
145
145
|
涉及高级泛型约束、映射类型、模板字面量类型、类型测试、DTO 映射或类型审查清单时,加载 [references/type-safety-patterns.md](references/type-safety-patterns.md)。
|
|
146
146
|
|
|
@@ -31,7 +31,7 @@ description: Use when running existing project validation commands and fixing fa
|
|
|
31
31
|
- 对 CI 专属失败记录 Node 版本、包管理器、环境变量、路径大小写和工作目录差异。
|
|
32
32
|
- 修复测试时优先修产品代码或测试等待方式,不用删除断言掩盖真实回归。
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## Constraints
|
|
35
35
|
|
|
36
36
|
- 不要盲目关闭规则来消除报错
|
|
37
37
|
- 除非有明确理由,不要为了通过检查而降低类型安全
|
|
@@ -40,9 +40,12 @@ description: Use when running existing project validation commands and fixing fa
|
|
|
40
40
|
- 不要删除失败测试来让验证通过
|
|
41
41
|
- 不要只运行失败命令的片段就声称整体验证通过
|
|
42
42
|
|
|
43
|
+
## 详细参考
|
|
44
|
+
|
|
45
|
+
撰写验证修复报告时,加载 [references/report-template.md](references/report-template.md)。
|
|
46
|
+
|
|
43
47
|
## Expected Output
|
|
44
48
|
|
|
45
49
|
- lint / type-check / test / build 等验证命令全部通过
|
|
46
50
|
- 失败项已修复或给出明确原因和后续行动
|
|
47
51
|
- 修复报告保存为 `reports/validation-fix-YYYY-MM-DD-HHmmss.md`
|
|
48
|
-
- 报告包含命令状态表、问题根因、修复说明、变更文件和剩余风险
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 验证修复报告模板
|
|
2
|
+
|
|
3
|
+
```markdown
|
|
4
|
+
# 验证修复报告
|
|
5
|
+
|
|
6
|
+
> 生成时间: YYYY-MM-DD HH:mm
|
|
7
|
+
> 验证范围: lint / type-check / test / build / CI
|
|
8
|
+
|
|
9
|
+
## 命令状态表
|
|
10
|
+
|
|
11
|
+
| 命令 | 初始状态 | 修复后状态 | 备注 |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| `npm run type-check` | 失败 / 通过 / 未运行 | 失败 / 通过 / 未运行 | ... |
|
|
14
|
+
|
|
15
|
+
## 失败摘要
|
|
16
|
+
|
|
17
|
+
- 最早出现且会级联的错误
|
|
18
|
+
- 受影响文件、错误类型和关键日志
|
|
19
|
+
- 是否属于 CI 专属、测试环境、依赖版本或 flaky 问题
|
|
20
|
+
|
|
21
|
+
## 根因
|
|
22
|
+
|
|
23
|
+
- 确认的根本原因
|
|
24
|
+
- 支持该结论的输出、日志或复现证据
|
|
25
|
+
|
|
26
|
+
## 修复内容
|
|
27
|
+
|
|
28
|
+
- 修改的文件和行为
|
|
29
|
+
- 为什么没有通过关闭规则、删除断言或降低类型安全来规避失败
|
|
30
|
+
|
|
31
|
+
## 验证结果
|
|
32
|
+
|
|
33
|
+
- 重新执行的命令
|
|
34
|
+
- 命令输出摘要
|
|
35
|
+
- 是否仍有失败项
|
|
36
|
+
|
|
37
|
+
## 剩余风险
|
|
38
|
+
|
|
39
|
+
- 未覆盖的验证命令
|
|
40
|
+
- 仍需用户决策或外部环境确认的问题
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
验证修复完成后,将报告保存到 `reports/validation-fix-YYYY-MM-DD-HHmmss.md`,并告知用户报告路径。
|
|
@@ -21,7 +21,7 @@ description: Use when designing or reviewing Vue 3 + TypeScript project structur
|
|
|
21
21
|
6. Tailwind token/variant 或响应式布局需求应分流到对应专项 skill,避免把样式系统规则塞进 Vue 组件规范。
|
|
22
22
|
5. 状态归属复杂时先做状态清单;DTO、公共 props 或泛型 composable 复杂时先收敛 TypeScript 类型契约。
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## 详细参考
|
|
25
25
|
|
|
26
26
|
需要具体 Vue 3 项目结构、组件模式、Composables、slots、Provide/Inject、路由、Pinia、API 层、错误处理、指令、样式、TypeScript、测试、性能或审查清单时,加载 [references/vue3-project-details.md](references/vue3-project-details.md)。
|
|
27
27
|
|
|
@@ -17,10 +17,10 @@ description: Use when moving expensive browser work off the main thread with Web
|
|
|
17
17
|
4. 传大对象时优先 Transferable Objects;不要让结构化克隆吞掉 Worker 带来的收益。
|
|
18
18
|
5. 在组件或页面卸载时 `terminate()`,并通过 Profiler、Performance 面板或 FPS 指标验证主线程改善。
|
|
19
19
|
|
|
20
|
-
##
|
|
20
|
+
## 详细参考
|
|
21
21
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
22
|
+
- 需要原生 Worker 文件、构建工具导入、React 生命周期封装和清理示例时,加载 [references/basic-worker.md](references/basic-worker.md)。
|
|
23
|
+
- 需要 Transferable Objects、Comlink、Worker pool、SharedWorker、CSP 和 SharedArrayBuffer 注意事项时,加载 [references/advanced-workers.md](references/advanced-workers.md)。
|
|
24
24
|
|
|
25
25
|
## Constraints
|
|
26
26
|
|
|
@@ -33,4 +33,3 @@ description: Use when moving expensive browser work off the main thread with Web
|
|
|
33
33
|
## Expected Output
|
|
34
34
|
|
|
35
35
|
计算密集型操作在后台线程执行,主线程输入和滚动恢复流畅,错误与取消路径明确,Worker 在卸载时被终止且无内存泄漏。
|
|
36
|
-
|