---
name: react-project
description: Scaffolds and develops React web applications with webpack, hash routing, and pnpm. Use when building web apps, SPAs, or React projects. Don't use for mobile H5 pages, backend-only services, or non-React frameworks.
---
# React 项目开发规范

## 核心约束

### 技术栈限制
- **必须使用 webpack-dev-server 4.x 版本**，不能使用 5.x 版本
- **优先使用 webpack** 作为打包工具，除非用户明确要求使用其他构建工具
- **禁止使用 scss 与 sass**
- **禁止使用 esbuild 与任何二进制依赖**
- **优先使用 pnpm**
- **路由仅可使用 hash 模式**，如使用 react-router-dom 时，应使用 HashRouter
- **Meoo Cloud 云服务** 使用 Meoo Cloud 云服务作为项目的后端

## Webpack 配置规范
### 配置要求
- devServer 的 **allowedHosts** 必须设置为 `['all', '.alibaba-inc.com']`
- devServer 必须配置 **historyApiFallback** 支持 hash 路由
- HtmlWebpackPlugin 必须配置 **inject: 'body'**
- 修改 webpack 配置后必须**重启开发服务器**

## Package.json 规范

### 必须的脚本命令
```json
{
  "scripts": {
    "dev": "webpack serve",
    "build": "webpack --mode production"
  }
}
```

- 使用 `pnpm run dev` 启动开发服务器
- 使用 `pnpm run build` 构建生产环境，输出到 dist 目录

## 开发注意事项

### 路由实现和验证 (MANDATORY)
- **所有导航功能必须先实现 URL 路由**，再添加 UI 交互
- **每个 tab/页面都必须有对应的 Route 定义**
- **菜单宽度固定，确保不会被tab页面挤压或遮挡**
- **实现完成后必须进行 构建预览 验证**
- **路由结构必须记录在 AGENTS.md 中**，包含完整的 URL 映射表
- **示例路由实现**：
```jsx
import { HashRouter, Routes, Route } from 'react-router-dom';

<HashRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/dashboard" element={<Dashboard />}>
      <Route path="analytics" element={<Analytics />} />
      <Route path="settings" element={<Settings />} />
    </Route>
  </Routes>
</HashRouter>
```

- **所有模式必须可以通过url参数进行切换**,如?theme=dark&lang=en 等等(前提是用户明确要求了要有这些模式)
- **严禁使用 Tailwind CSS 配置中未定义的颜色**

### 依赖管理
- 将所有需要的依赖添加到 package.json
- 尽量避免使用 `pnpm i <pkg>` 单独安装
- 更新 package.json 后，优先执行 `pnpm install`

### 资源引用
- 如果用户没特别约束，可以使用 **Unsplash** 的图片资源
- 如果用户没特别约束，可以使用 **FontAwesome** 的图标资源
- 禁止使用 base64 格式的图片/文件

### 前端视觉要求
- 生成的前端需要体现**设计感、规范专业、严谨和考究的细节**
- 包含尽可能多的相关功能和交互
- 添加周到的细节，如悬停状态、过渡和微交互
- 应用设计原则：层次结构、对比、平衡和动态

## React 专属最佳实践
- IMPORTANT: 必须创建标准React应用，严禁使用单HTML
- JSX语法错误导致的多次修复失败（尝试3次以上），直接重写而不是继续陷入修复的循环
- 任何文件编辑和新建之后最终交付前都要运行pnpm run dev确保没有任何编译问题
