catalog/repos/aiko-atami--fsd.md

211 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FSD前端架构设计技能
`前端架构` `Feature-Sliced Design` `Codex` `React` `代码组织`
# Codex 的 Feature-Sliced Design 技能v2.1
本技能帮助 Codex 将 Feature-Sliced DesignFSDv2.1 架构方法论应用于前端项目。
## v2.1 新增内容
**核心更新****"页面优先"**方法。
- 在需要复用之前,将代码保留在使用它的地方。
-`pages``widgets` 开始;仅在真正复用时才提取到 `features``entities`
- 提升内聚性,简化重构,加快开发速度。
## 本技能包含的内容
- 6 个活跃 FSD 层(`app``pages``widgets``features``entities``shared`)的完整指南
- **v2.1 新增**"页面优先"代码放置策略
- **v2.1 新增**:实体间跨导入的公共 API`@x` 符号)
- **v2.1 新增**`shared` 中感知应用的代码
- 层/切片/片段的组织规则
- 公共 API 模式与最佳实践
- React、Redux、React Query 和 Next.js 示例
- 需要避免的反模式(包括过早提取)
- 从 v2.0 迁移到 v2.1 的策略
- 正确放置代码的决策框架
- Steiger 架构 lint 工具集成
## 安装
### 为 Codex 本地安装
1. 创建自定义技能目录:
```bash
mkdir -p ~/.codex/skills
```
2. 复制为单个技能文件:
```bash
cp SKILL.md ~/.codex/skills/feature-sliced-design.md
```
3. 或复制为技能文件夹:
```bash
mkdir -p ~/.codex/skills/feature-sliced-design
cp SKILL.md ~/.codex/skills/feature-sliced-design/
cp -r agents ~/.codex/skills/feature-sliced-design/
```
### 替代方法
将 `feature-sliced-design-skill` 文件夹放置在项目根目录,并指定 Codex 使用它。
## 使用方式
在以下情况下,该技能将自动触发:
- 提及"FSD"、"Feature-Sliced Design"或"feature sliced"
- 创建新的前端结构
- 重构现有代码
- 讨论架构或代码组织方式
- 询问某段代码应该放在哪里
- 解决跨导入或依赖问题
- 拆解功能或组件
## 使用示例
### 示例 1创建新功能v2.1 方式)
```
用户:"创建一个个人资料编辑表单"
Codex我将把它放在 pages/profile/,因为它只在这个页面使用。
如果之后需要复用,我们可以将其移动到 features/。
```
### 示例 2使用页面优先方式重构
```
用户:"我在 features/ 中有一个 UserProfile 组件,但它只在一个页面上使用"
Codex在 v2.1 中,它应该移回 pages/。features 应包含可复用的交互逻辑。
```
### 示例 3项目初始化
```
用户:"帮我搭建一个使用 FSD v2.1 的新 React 项目"
Codex[创建结构、配置路径别名、解释页面优先原则]
```
### 示例 4跨导入
```
用户:"实体 User 需要引用 Order"
Codex使用 @x 符号在实体之间进行显式跨导入。
```
## v2.1 核心概念
### 页面优先方法
```
1. 从 pages/ 开始,将代码保留在使用它的位置附近。
2. 仅在真正复用时才提取到 features/entities。
3. 不要预测未来的复用需求;等待真实的重复出现。
```
### 层结构
```
app/ <- 应用初始化
pages/ <- 包含自身逻辑的页面
widgets/ <- 包含自身逻辑的复合 UI 块
features/ <- 可复用的业务交互
entities/ <- 可复用的业务实体
shared/ <- 基础设施与感知应用的共享代码
```
**注意**`processes/` 层在 v2.1 中已废弃。
### 导入规则
模块只能从更低层级导入:
- `features/` -> `entities/`、`shared/`
- `entities/` 不得从 `features/` 导入
### 公共 API
每个切片应通过 `index.ts` 暴露公共 API
```typescript
// features/auth/index.ts
export { LoginForm } from './ui/LoginForm';
export { useAuth } from './model/useAuth';
```
## 典型项目结构
```text
src/
├── app/
├── pages/
├── widgets/
├── features/
├── entities/
└── shared/
```
## 支持的技术栈
- React
- Vue
- Angular
- Svelte
- Next.js
- Redux / Redux Toolkit
- React Query
- MobX
- TypeScript
- Vite
- Create React App
## 附加工具
### Steiger——FSD 架构 lint 工具
[Steiger](https://github.com/feature-sliced/steiger) 是验证 FSD 规则的官方工具:
```bash
npm install -D @feature-sliced/steiger
npx steiger src
```
检查内容包括:
- 导入规则违反
- 公共 API 使用情况
- 跨导入违规
- 层结构一致性
## 资源
- [FSD 官方文档](https://feature-sliced.design/)
- [FSD 文档仓库](https://github.com/feature-sliced/documentation)
- [Steiger lint 工具](https://github.com/feature-sliced/steiger)
- [FSD 示例](https://feature-sliced.design/examples)
## 从 FSD v2.0 迁移到 v2.1
迁移是非破坏性的,可以逐步进行:
1. 审查现有代码。
2. 将页面专属逻辑移回 `pages/`。
3. 将 widget 专属逻辑保留在 `widgets/`。
4. 在 `features/` 和 `entities/` 中只保留真正可复用的逻辑。
5. 在 `shared` 中更新基础设施和应用级常量。
6. 移除已废弃的 `processes/` 用法。
## 故障排查
### 技能未激活
- 确认文件/文件夹位于预期的技能目录中。
- 确认命名正确。
- 重启 Codex。
### 不确定代码应放在哪里
询问 Codex"在 FSD 中,[代码描述] 应该放在哪里?"
### 导入规则违反
该技能应能识别违规并提出修复方案。
## 许可证
本技能基于 Feature-Sliced Design 官方文档,可自由使用。
---
**重要**:本技能遵循 FSD v2.1 和"页面优先"方法。请将其视为实用指南,而非一成不变的规则。
**黄金法则v2.1**:从 `pages/widgets` 开始;仅当真正的复用需求出现时,才提取到 `features/entities`。