scaffold

按项目规范创建 page、feature 或 component 的标准目录结构和样板文件。用法:/scaffold <type> <Name>,如 /scaffold page UserDetail

按项目约定的目录结构创建新的 page、feature 或 component。

依赖与版本

若本次脚手架涉及新增或建议 package.json 依赖,遵循项目 .claude/rules/react.md.claude/rules/vue.md 中「版本与依赖」约定;项目中尚无对应规则时,优先采用彼此兼容的主流稳定版本(对齐官方文档、脚手架默认值或包管理器推荐)。

参数解析

$ARGUMENTS 中解析两个参数:

  • type: page | feature | component(必填)
  • name: 模块名称,使用 PascalCase(必填)

如果参数缺失,提示用法示例并要求用户补充:

用法:/frontend-craft:scaffold <type> <Name>
示例:
  /frontend-craft:scaffold page UserDetail
  /frontend-craft:scaffold feature payment
  /frontend-craft:scaffold component DataTable

执行步骤

1. 检测项目框架

检查 package.jsondependencies

  • 包含 react → React 项目
  • 包含 vue → Vue 项目
  • 都不包含 → 提示用户手动指定

2. 确定目标路径

检查 src/ 目录是否存在,确定基础路径:

  • page → src/pages/<Name>/
  • feature → src/features/<name>/(name 转为 kebab-case)
  • component → src/components/<Name>/

如果目标目录已存在,提示用户确认是否继续。

3. 创建目录和文件

根据框架和类型,创建以下结构:

React page

src/pages/<Name>/
├── <Name>Page.tsx
├── components/
│   └── .gitkeep
└── hooks/
    └── .gitkeep

<Name>Page.tsx 内容:

export default function <Name>Page() {
    return (
        <div>
            <h1><Name></h1>
        </div>
    );
}

React feature

src/features/<name>/
├── components/
│   └── .gitkeep
├── hooks/
│   └── .gitkeep
├── api.ts
├── types.ts
├── constants.ts
└── index.ts

index.ts 内容:

export * from './types';
export * from './constants';

api.ts 内容:

import { request } from '@/services/request';

types.tsconstants.ts 创建为空文件(仅有注释说明用途)。

React component

src/components/<Name>/
├── <Name>.tsx
├── <Name>.styles.css
└── __tests__/
    └── <Name>.spec.tsx

<Name>.tsx 内容:

import styles from './<Name>.styles.css';

interface <Name>Props {
    // TODO: 定义 props
}

export function <Name>({ }: <Name>Props) {
    return (
        <div className={styles.root}>
            <Name>
        </div>
    );
}

Vue page

src/pages/<Name>/
├── <Name>Page.vue
├── components/
│   └── .gitkeep
└── composables/
    └── .gitkeep

<Name>Page.vue 内容:

<script setup lang="ts">
// TODO: 页面逻辑
</script>

<template>
    <div>
        <h1><Name></h1>
    </div>
</template>

<style scoped>
</style>

Vue feature

src/features/<name>/
├── components/
│   └── .gitkeep
├── composables/
│   └── .gitkeep
├── api.ts
├── types.ts
├── constants.ts
└── index.ts

index.ts 内容与 React 相同。

Vue component

src/components/<Name>/
├── <Name>.vue
└── __tests__/
    └── <Name>.spec.ts

<Name>.vue 内容:

<script setup lang="ts">
interface Props {
    // TODO: 定义 props
}

const props = defineProps<Props>();
</script>

<template>
    <div>
        <Name>
    </div>
</template>

<style scoped>
</style>

4. 输出确认

创建完成后,输出:

  • 创建的文件清单
  • 下一步建议(如"在路由配置中注册新页面"、"在 index.ts 中导出公开 API")