项目介绍.mdc 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. ---
  2. description:
  3. globs:
  4. alwaysApply: true
  5. ---
  6. # 项目介绍
  7. ## 项目概述
  8. 这是一个基于TypeScript + React Router v7 + shadcn/ui + Tailwind CSS+Zustand的React前端项目
  9. ## 技术栈
  10. TypeScript + React Router v7 + shadcn/ui + Tailwind CSS+Zustand的React
  11. ### 核心框架和库
  12. - **React 19**: 用于构建用户界面的JavaScript库
  13. - **TypeScript**: 添加静态类型检查的JavaScript超集
  14. - **Vite**: 现代化的前端构建工具,提供快速的开发体验
  15. - **React Router**: 用于处理应用程序的路由
  16. - **Zustand**: 轻量级状态管理库,用于管理应用状态
  17. ### UI组件和样式
  18. - **Shadcn UI**: 基于Radix UI的组件集合,提供了可定制的UI组件
  19. - **Tailwind CSS**: 实用优先的CSS框架,用于快速构建自定义设计
  20. - **Radix UI**: 提供无样式、可访问的UI组件
  21. - **Lucide React**: 提供简洁的图标集
  22. ### 表单和验证
  23. - **React Hook Form**: 用于表单处理和验证
  24. - **Zod**: TypeScript优先的模式验证库
  25. ### 开发工具
  26. - **ESLint**: 代码质量检查工具
  27. - **TypeScript ESLint**: TypeScript的ESLint插件
  28. ## 项目结构
  29. ```
  30. ├── src/ # 源代码目录
  31. │ ├── App.tsx # 应用主组件(ThemeProvider + Outlet)
  32. │ ├── main.tsx # 应用入口,挂载 RouterProvider 与全局样式
  33. │ ├── vite-env.d.ts # Vite 环境类型声明
  34. │ ├── assets/ # 静态资源
  35. │ │ └── react.svg # React 图标
  36. │ ├── components/ # 组件目录
  37. │ │ ├── theme-provider.tsx # 主题提供者
  38. │ │ ├── theme-toggle.tsx # 主题切换(圆形扩散动画)
  39. │ │ ├── blog/ # 博客相关组件
  40. │ │ │ ├── article-card.tsx
  41. │ │ │ ├── article-toc.tsx
  42. │ │ │ ├── blog-footer.tsx
  43. │ │ │ ├── blog-header.tsx
  44. │ │ │ ├── blog-sidebar.tsx
  45. │ │ │ ├── code-block.tsx
  46. │ │ │ ├── markdown-renderer.tsx
  47. │ │ │ ├── search-suggestions.tsx
  48. │ │ │ ├── simple-markdown.tsx
  49. │ │ │ ├── timeline-archive.tsx
  50. │ │ │ ├── user-profile.tsx
  51. │ │ │ └── UserIpInfo.tsx
  52. │ │ ├── layout/ # 布局组件
  53. │ │ │ ├── blog-layout.tsx
  54. │ │ │ ├── mode-toggle.tsx
  55. │ │ │ └── page-transition.tsx
  56. │ │ └── ui/ # 基础 UI 组件(shadcn/ui 集合)
  57. │ │ ├── accordion.tsx
  58. │ │ ├── alert-dialog.tsx
  59. │ │ ├── alert.tsx
  60. │ │ ├── aspect-ratio.tsx
  61. │ │ ├── avatar.tsx
  62. │ │ ├── badge.tsx
  63. │ │ ├── breadcrumb.tsx
  64. │ │ ├── button.tsx
  65. │ │ ├── calendar.tsx
  66. │ │ ├── card.tsx
  67. │ │ ├── carousel.tsx
  68. │ │ ├── chart.tsx
  69. │ │ ├── checkbox.tsx
  70. │ │ ├── collapsible.tsx
  71. │ │ ├── command.tsx
  72. │ │ ├── context-menu.tsx
  73. │ │ ├── dialog.tsx
  74. │ │ ├── drawer.tsx
  75. │ │ ├── dropdown-menu.tsx
  76. │ │ ├── form.tsx
  77. │ │ ├── hover-card.tsx
  78. │ │ ├── input-otp.tsx
  79. │ │ ├── input.tsx
  80. │ │ ├── label.tsx
  81. │ │ ├── menubar.tsx
  82. │ │ ├── navigation-menu.tsx
  83. │ │ ├── pagination.tsx
  84. │ │ ├── popover.tsx
  85. │ │ ├── progress.tsx
  86. │ │ ├── radio-group.tsx
  87. │ │ ├── resizable.tsx
  88. │ │ ├── scroll-area.tsx
  89. │ │ ├── select.tsx
  90. │ │ ├── separator.tsx
  91. │ │ ├── sheet.tsx
  92. │ │ ├── sidebar.tsx
  93. │ │ ├── skeleton.tsx
  94. │ │ ├── slider.tsx
  95. │ │ ├── sonner.tsx
  96. │ │ ├── switch.tsx
  97. │ │ ├── table.tsx
  98. │ │ ├── tabs.tsx
  99. │ │ ├── textarea.tsx
  100. │ │ ├── toggle-group.tsx
  101. │ │ ├── toggle.tsx
  102. │ │ └── tooltip.tsx
  103. │ ├── hooks/ # 自定义 Hook
  104. │ │ ├── api/ # API 请求钩子目录
  105. │ │ ├── use-mobile.ts # 移动设备检测
  106. │ │ ├── use-mouse-transform.ts # 鼠标位移变换
  107. │ │ └── use-simple-mouse-scale.ts # 简易鼠标缩放
  108. │ ├── lib/ # 工具与服务
  109. │ │ ├── highlight-utils.ts # 代码高亮工具
  110. │ │ ├── search-service.ts # 搜索服务
  111. │ │ ├── simple-post-loader.ts # Markdown 文章加载器
  112. │ │ └── utils.ts # 通用工具函数
  113. │ ├── pages/ # 页面
  114. │ │ ├── About.tsx
  115. │ │ ├── Archive.tsx
  116. │ │ ├── ArticleDetail.tsx
  117. │ │ ├── ArticleList.tsx
  118. │ │ ├── BlogHome.tsx
  119. │ │ ├── Categories.tsx
  120. │ │ ├── HelloWorld.tsx
  121. │ │ ├── Search.tsx
  122. │ │ ├── Tags.tsx
  123. │ │ └── TestPost.tsx
  124. │ ├── posts/ # Markdown 文章目录(节选,禁止在当前文件更新该目录下的文章)
  125. │ │ ├── 4月测试文章.md
  126. │ │ ├── 2002-最佳实践 copy.md
  127. │ │ └── ......
  128. │ ├── routes/ # 路由配置
  129. │ │ ├── blog-routes.tsx
  130. │ │ └── routes.tsx
  131. │ ├── store/ # 状态管理(Zustand)
  132. │ │ ├── blog-store.ts
  133. │ │ ├── counter-store.ts
  134. │ │ └── theme-store.ts
  135. │ ├── styles/ # 样式
  136. │ │ ├── App.css
  137. │ │ └── index.css # 包含 Tailwind CSS 引入
  138. │ └── types/ # TypeScript 类型定义
  139. │ ├── blog.ts
  140. │ ├── components.ts
  141. │ └── index.ts
  142. ├── public/ # 公共静态资源
  143. │ ├── avatar.jpg
  144. │ ├── blog-background.jpg
  145. │ └── vite.svg
  146. ├── rule/ # 项目规则与文档
  147. │ ├── rule.md
  148. │ ├── 前端代码注释规则.md
  149. │ ├── 前端页面设计规则.md
  150. │ ├── 文件命名规则.md
  151. │ └── 后端api接口文档/
  152. │ └── 接口统一响应文档.md
  153. ├── .gitignore
  154. ├── components.json # shadcn/ui 组件配置
  155. ├── eslint.config.js
  156. ├── index.html
  157. ├── package.json
  158. ├── pnpm-lock.yaml
  159. ├── tsconfig.json
  160. ├── tsconfig.app.json
  161. ├── tsconfig.node.json
  162. └── vite.config.ts
  163. ```
  164. ## 主要功能
  165. ### 状态管理
  166. 项目使用Zustand进行状态管理,包括:
  167. - **主题状态管理**: 支持亮色、暗色和系统主题
  168. - **计数器状态管理**: 简单的计数器示例,展示Zustand的基本用法
  169. ### 路由管理
  170. 使用React Router进行路由管理,支持嵌套路由和动态路由。
  171. ### 组件系统
  172. 项目采用组件化开发方式,组件分为以下几类:
  173. - **功能组件**: 实现特定业务功能的组件
  174. - **布局组件**: 处理页面布局的组件
  175. - **UI组件**: 基础UI组件,如按钮、卡片等
  176. ## 开发指南
  177. ### 安装依赖
  178. ```bash
  179. pnpm install
  180. ```
  181. ### 启动开发服务器
  182. ```bash
  183. pnpm dev
  184. ```
  185. ### 构建项目
  186. ```bash
  187. pnpm build
  188. ```
  189. ### 代码检查
  190. ```bash
  191. pnpm lint
  192. ```
  193. ## 最佳实践
  194. 1. 使用TypeScript类型定义确保代码类型安全
  195. 2. 遵循组件化开发原则,保持组件的单一职责
  196. 3. 使用Zustand进行状态管理,避免过度使用全局状态
  197. 4. 使用Tailwind CSS进行样式开发,保持样式的一致性
  198. 5. 遵循ESLint规则,保持代码质量