Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/bage2014/study --skill personal-frontend-coding-standard명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | personal-frontend-coding-standard |
| description | 前端编码规范技能,提供前端开发的编码标准和最佳实践指导 |
| trigger | 编写前端代码时需要遵循编码规范 |
| disable-when | 团队已有明确的编码规范 |
| category | personal |
| tags | ["coding","standard","frontend","javascript"] |
提供前端开发的编码标准和最佳实践指导,帮助开发者编写高质量、可维护的前端代码。
在以下情况调用此技能:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| framework | String | 否 | 使用的框架(React/Vue/Angular等),默认React |
| language | String | 否 | 目标语言(TypeScript/JavaScript),默认TypeScript |
| focusArea | String | 否 | 关注领域(naming/structure/style/component/state/performance) |
{
"status": "SUCCESS",
"framework": "React",
"language": "TypeScript",
"focusArea": "naming",
"rules": [
{
"category": "命名规范",
"rules": [
{
"rule": "组件名使用 PascalCase",
"example": "const UserProfile = () => {};",
"description": "组件名应采用大驼峰命名法"
}
]
}
],
"bestPractices": ["最佳实践1", "最佳实践2"]
}
| 元素类型 | 规范 | 示例 |
|---|---|---|
| 组件名 | PascalCase | UserProfile, OrderList |
| 函数名 | camelCase | getUser(), handleSubmit() |
| 变量名 | camelCase | userName, isLoading |
| 常量名 | UPPER_SNAKE_CASE | MAX_RETRY, API_BASE_URL |
| 文件/目录名 | kebab-case | user-profile.tsx, components/ |
| Hook名 | use + camelCase | useUser(), useLocalStorage() |
src/
├── components/ # 通用组件
│ ├── common/ # 公共基础组件
│ │ └── Button.tsx
│ ├── layout/ # 布局组件
│ │ └── Header.tsx
│ └── pages/ # 页面级组件
│ └── HomePage.tsx
├── hooks/ # 自定义 Hooks
│ └── useUser.ts
├── services/ # API 服务
│ └── api.ts
├── store/ # 状态管理
│ └── store.ts
├── types/ # 类型定义
│ └── index.ts
├── utils/ # 工具函数
│ └── format.ts
├── styles/ # 全局样式
│ └── global.css
└── App.tsx # 主应用组件
| 原则 | 说明 |
|---|---|
| 单一职责 | 每个组件只负责一个功能 |
| 可复用性 | 设计可复用的通用组件 |
| 无状态优先 | 能用函数组件就不用类组件 |
| 受控组件 | 表单组件优先使用受控模式 |
| Props 验证 | 使用 TypeScript 或 PropTypes |
| 原则 | 说明 |
|---|---|
| BEM 命名 | 使用 BEM 命名规范 |
| 模块化 | 使用 CSS Modules 或 styled-components |
| 响应式 | 使用媒体查询或 CSS-in-JS |
| 避免 !important | 优先使用选择器优先级 |
| 变量管理 | 使用 CSS 变量或 SCSS 变量 |
| 原则 | 说明 |
|---|---|
| 最小化状态 | 只保留必要的状态 |
| 状态提升 | 共享状态提升到公共父组件 |
| Context 使用 | 全局状态使用 Context 或状态库 |
| 异步状态 | 管理异步操作的加载和错误状态 |
| 状态持久化 | 必要时使用 localStorage |
| 原则 | 说明 |
|---|---|
| 懒加载 | 使用 React.lazy 和 Suspense |
| 虚拟滚动 | 大数据列表使用虚拟滚动 |
| 防抖节流 | 高频事件使用防抖节流 |
| 图片优化 | 使用合适的图片格式和尺寸 |
| 缓存策略 | 缓存 API 响应 |
// 组件示例
interface UserProfileProps {
userId: string;
}
const UserProfile = ({ userId }: UserProfileProps) => {
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const fetchUser = async () => {
try {
setLoading(true);
setError(null);
const data = await api.getUser(userId);
setUser(data);
} catch (err) {
setError('Failed to fetch user');
} finally {
setLoading(false);
}
};
fetchUser();
}, [userId]);
if (loading) return <LoadingSpinner />;
if (error) return < = />;
(!user) ;
(
);
};
;
// 类型定义
interface User {
id: string;
name: string;
email: string;
avatar?: string;
}
// 联合类型
type Status = 'loading' | 'success' | 'error';
// 泛型工具类型
type PartialUser = Partial<User>;
type UserId = Pick<User, 'id'>;
type UserWithoutId = Omit<User, 'id'>;
| 检查项 | 说明 | 状态 |
|---|---|---|
| 命名规范 | 变量、函数、组件命名是否符合规范 | ✅/❌ |
| 代码格式 | 缩进、空格、换行是否符合规范 | ✅/❌ |
| 类型安全 | TypeScript 类型是否正确 | ✅/❌ |
| 组件设计 | 组件是否遵循单一职责 | ✅/❌ |
| 状态管理 | 状态使用是否合理 | ✅/❌ |
| 性能优化 | 是否考虑性能问题 | ✅/❌ |
| 错误处理 | 是否正确处理异常情况 | ✅/❌ |
| 可测试性 | 代码是否易于测试 | ✅/❌ |
| 组件 | 职责 | 描述 |
|---|---|---|
| CodeStyleChecker | 代码风格检查器 | 检查代码是否符合命名规范 |
| ComponentAnalyzer | 组件分析器 | 分析组件设计和结构 |
| TypeScriptValidator | TypeScript 验证器 | 验证类型定义 |
| PerformanceAnalyzer | 性能分析器 | 检测性能问题 |
无需额外配置,基于规则引擎进行代码分析。