修改百度地图AK
This commit is contained in:
194
.cursor/rules/frameworks/android.mdc
Normal file
194
.cursor/rules/frameworks/android.mdc
Normal file
@@ -0,0 +1,194 @@
|
||||
---
|
||||
description: Android 原生开发约定和最佳实践,包括 Kotlin、Jetpack Compose、架构模式等
|
||||
globs: **/*.kt,**/*.java,**/*.xml
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Android 开发规范
|
||||
|
||||
## 项目结构和模块化
|
||||
|
||||
- 使用标准的 Android 项目结构
|
||||
- 按功能模块组织代码,实现模块化架构
|
||||
- 使用 Gradle Version Catalogs 管理依赖版本
|
||||
- 合理划分 `app`、`feature`、`core`、`data` 模块
|
||||
- 遵循包命名约定:`com.company.app.feature.domain`
|
||||
- 分离 `presentation`、`domain`、`data` 层
|
||||
|
||||
## 编程语言和代码规范
|
||||
|
||||
- **强制使用 Kotlin**,避免 Java(除非维护遗留代码)
|
||||
- 遵循 [Kotlin 编码规范](mdc:languages/kotlin.mdc)
|
||||
- 优先使用数据类、密封类和内联类
|
||||
- 合理使用扩展函数增强现有 API
|
||||
- 使用协程和 Flow 进行异步编程
|
||||
- 避免使用 `!!` 操作符,优先使用安全调用
|
||||
|
||||
## UI 开发
|
||||
|
||||
### Jetpack Compose(推荐)
|
||||
- **优先使用 Jetpack Compose** 构建现代声明式 UI
|
||||
- 遵循 Composition over inheritance 原则
|
||||
- 使用 `@Composable` 函数构建可重用组件
|
||||
- 正确使用 `remember`、`LaunchedEffect`、`derivedStateOf`
|
||||
- 实现 `CompositionLocal` 进行依赖传递
|
||||
- 使用 `Modifier` 进行样式和行为定制
|
||||
|
||||
### 传统 View 系统
|
||||
- 使用 View Binding 替代 `findViewById`
|
||||
- 避免使用 Data Binding(除非必要)
|
||||
- 正确使用 `ConstraintLayout` 和 `RecyclerView`
|
||||
- 实现自定义 View 时遵循测量、布局、绘制流程
|
||||
|
||||
### 设计规范
|
||||
- 遵循 **Material Design 3** 设计规范
|
||||
- 实现动态颜色主题(Material You)
|
||||
- 支持深色主题和高对比度模式
|
||||
- 实现响应式布局适配不同屏幕尺寸
|
||||
- 使用 `WindowInsets` 处理状态栏和导航栏
|
||||
|
||||
## 架构模式
|
||||
|
||||
### 推荐架构
|
||||
- 使用 **MVVM** 或 **MVI** 架构模式
|
||||
- 遵循 **Clean Architecture** 原则
|
||||
- 实现 **Repository 模式** 进行数据抽象
|
||||
- 使用 **UseCase/Interactor** 封装业务逻辑
|
||||
- 采用 **单向数据流** 设计
|
||||
|
||||
### ViewModel 最佳实践
|
||||
- 使用 `ViewModel` 管理 UI 相关数据
|
||||
- 通过 `StateFlow`/`LiveData` 暴露状态
|
||||
- 在 `ViewModel` 中处理业务逻辑
|
||||
- 正确使用 `viewModelScope` 管理协程
|
||||
- 避免在 `ViewModel` 中持有 Context 引用
|
||||
|
||||
## 依赖注入
|
||||
|
||||
- **强制使用 Dagger Hilt** 进行依赖注入
|
||||
- 正确配置 `@Module`、`@InstallIn`、作用域注解
|
||||
- 使用 `@Qualifier` 区分相同类型的不同实现
|
||||
- 避免循环依赖,合理设计依赖关系
|
||||
- 使用 `@Provides` 和 `@Binds` 提供依赖
|
||||
- 在测试中使用 `@TestInstallIn` 替换模块
|
||||
|
||||
## 数据层实现
|
||||
|
||||
### 本地存储
|
||||
- 使用 **Room** 数据库进行复杂数据存储
|
||||
- 使用 **DataStore** 替代 SharedPreferences
|
||||
- 正确实现数据库迁移策略
|
||||
- 使用 `@TypeConverter` 处理复杂数据类型
|
||||
- 实现数据访问对象(DAO)模式
|
||||
|
||||
### 缓存策略
|
||||
- 实现 **Repository** 模式统一数据访问
|
||||
- 使用 `@Query` 和 `Flow` 实现响应式数据
|
||||
- 实现离线优先(Offline-first)策略
|
||||
- 正确处理缓存失效和数据同步
|
||||
|
||||
## 网络层
|
||||
|
||||
- 使用 **Retrofit** 进行 REST API 调用
|
||||
- 使用 **OkHttp** 拦截器处理认证、日志、缓存
|
||||
- 实现适当的错误处理和重试机制
|
||||
- 使用 **Moshi** 或 **Kotlinx Serialization** 进行 JSON 解析
|
||||
- 正确处理网络连接状态变化
|
||||
- 实现请求去重和防抖动
|
||||
|
||||
## 异步编程和响应式
|
||||
|
||||
- **强制使用 Kotlin Coroutines** 进行异步编程
|
||||
- 正确使用 `suspend` 函数和协程作用域
|
||||
- 使用 **Flow** 进行响应式数据流编程
|
||||
- 正确使用 `collectAsState()`、`collectAsStateWithLifecycle()`
|
||||
- 避免使用 `GlobalScope`,使用结构化并发
|
||||
- 正确处理协程取消和异常
|
||||
|
||||
## 生命周期管理
|
||||
|
||||
- 正确处理 Activity 和 Fragment 生命周期
|
||||
- 使用 **Lifecycle-aware** 组件(`LifecycleObserver`)
|
||||
- 在 Compose 中使用 `DisposableEffect` 管理资源
|
||||
- 使用 `viewLifecycleOwner` 在 Fragment 中观察数据
|
||||
- 避免在组件销毁后执行异步操作
|
||||
|
||||
## 导航和路由
|
||||
|
||||
- 使用 **Navigation Component** 进行页面导航
|
||||
- 在 Compose 中使用 **Compose Navigation**
|
||||
- 正确处理深度链接(Deep Links)
|
||||
- 使用 Safe Args 进行类型安全的参数传递
|
||||
- 实现单一 Activity 多 Fragment 架构
|
||||
|
||||
## 性能优化
|
||||
|
||||
### 渲染性能
|
||||
- 使用 **Baseline Profiles** 优化应用启动
|
||||
- 避免过度绘制和布局嵌套
|
||||
- 正确使用 `RecyclerView` 的 `ViewHolder` 模式
|
||||
- 在 Compose 中合理使用 `key()` 和 `remember()`
|
||||
|
||||
### 内存管理
|
||||
- 避免内存泄漏,正确管理对象生命周期
|
||||
- 使用 **LeakCanary** 检测内存泄漏
|
||||
- 合理使用图片加载库(Glide、Coil)
|
||||
- 实现懒加载和分页加载
|
||||
|
||||
### 启动优化
|
||||
- 使用 **App Startup** 优化初始化流程
|
||||
- 实现启动画面(Splash Screen API)
|
||||
- 避免在 Application 中执行耗时操作
|
||||
|
||||
## 测试策略
|
||||
|
||||
### 单元测试
|
||||
- 为业务逻辑编写单元测试,目标覆盖率 ≥80%
|
||||
- 使用 **MockK** 进行 Kotlin 友好的模拟测试
|
||||
- 使用 **Truth** 断言库提高测试可读性
|
||||
- 测试 Repository、UseCase、ViewModel 层
|
||||
|
||||
### UI 测试
|
||||
- 使用 **Compose Test** 测试 Compose UI
|
||||
- 使用 **Espresso** 测试传统 View 系统
|
||||
- 实现端到端测试覆盖关键用户流程
|
||||
- 使用 **Hilt Testing** 进行依赖注入测试
|
||||
|
||||
## 安全实践
|
||||
|
||||
- 正确实现运行时权限请求
|
||||
- 使用 **Android Keystore** 存储敏感数据
|
||||
- 实现网络安全配置(Network Security Config)
|
||||
- 使用 **Certificate Pinning** 防止中间人攻击
|
||||
- 避免在日志中输出敏感信息
|
||||
- 实现代码混淆和反调试措施
|
||||
|
||||
## 国际化和无障碍
|
||||
|
||||
- 实现多语言支持(i18n)
|
||||
- 使用 **TalkBack** 测试无障碍功能
|
||||
- 为 UI 元素添加 `contentDescription`
|
||||
- 支持从右到左(RTL)布局
|
||||
- 实现动态字体大小适配
|
||||
|
||||
## 构建和发布
|
||||
|
||||
### 构建配置
|
||||
- 使用 **Gradle Kotlin DSL** 编写构建脚本
|
||||
- 配置多变体构建(Debug/Release/Staging)
|
||||
- 使用 **R8** 进行代码收缩和混淆
|
||||
- 实现自动化版本管理
|
||||
|
||||
### 发布流程
|
||||
- 使用 **Android App Bundle(AAB)** 进行发布
|
||||
- 配置应用签名和密钥管理
|
||||
- 实现渐进式发布和 A/B 测试
|
||||
- 使用 **Play Console** 进行应用分析
|
||||
|
||||
## 代码质量保证
|
||||
|
||||
- 使用 **Detekt** 进行静态代码分析
|
||||
- 配置 **Lint** 检查规则
|
||||
- 使用 **ktfmt** 或 **ktlint** 进行代码格式化
|
||||
- 实现 CI/CD 流水线进行自动化检查
|
||||
- 定期进行代码审查(Code Review)
|
||||
67
.cursor/rules/frameworks/android_bak.mdc
Normal file
67
.cursor/rules/frameworks/android_bak.mdc
Normal file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
description: 该规则解释了 Android 原生开发的约定和最佳实践,包括 Kotlin、Java、Jetpack Compose 等。
|
||||
globs: **/*.kt,**/*.java,**/*.xml
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
<!-- 来源:https://github.com/flyeric0212/cursor-rules/issues/4 -->
|
||||
|
||||
# Android 开发规则
|
||||
|
||||
## 通用规则
|
||||
1. 默认情况下,所有回复都必须是中文,而且需要在开头称呼用户为"帅哥:"
|
||||
2. 复杂需求拆解成小任务,分步实现,每完成一个小任务后再继续
|
||||
3. 代码实现前后要仔细检查,确保类型安全、空安全处理完整、生命周期管理正确
|
||||
4. 在已有功能基础上添加新功能时,必须确保:
|
||||
- 不影响原有功能和组件复用性
|
||||
- 不添加其他功能、代码、逻辑、文件、配置、依赖
|
||||
5. 遵循项目架构设计,保持代码风格与 Android 编码规范一致(如 Kotlin 风格指南)
|
||||
6. 组件设计遵循单一职责原则,不混合多个变更
|
||||
7. 在进行组件设计规划时,符合"第一性原理"
|
||||
8. 在代码实现时,符合"KISS原则"和"SOLID原则"
|
||||
9. 优先使用 Android Jetpack 组件库和现有工具类,避免重复代码
|
||||
10. 不引入不必要的依赖,优先使用项目已有库
|
||||
11. 确保代码可读性,复杂逻辑添加注释,类和接口参数详细定义
|
||||
12. 代码变更范围最小化,避免修改公共组件、全局状态
|
||||
13. 实现后进行基本逻辑自检,确保生命周期管理和内存泄漏处理正确
|
||||
14. 如有疑问,先询问再修改,不要擅自改变组件 API 设计
|
||||
|
||||
## 自动化执行与安全策略
|
||||
15. 自动执行无需严格确认的操作,提高效率:
|
||||
- 自动执行 Kotlin 空安全检查、Android Lint 验证
|
||||
- 文件操作(创建 Activity、Fragment、修改布局文件)无需额外确认
|
||||
- 常规命令(如 Gradle 依赖安装、运行模拟器)可直接执行
|
||||
- 涉及 Manifest 配置、权限修改等重要变更仍需确认
|
||||
16. 重要操作(修改 Application 类、AndroidManifest.xml)应先保留副本
|
||||
17. 涉及 API 接口变更,优先修改数据模型类和接口定义
|
||||
18. 执行影响较大的修改前,自动检测组件依赖关系,分析影响范围
|
||||
|
||||
## 代码质量优化
|
||||
19. 代码生成后,自动优化(移除未使用导入、合并重复资源文件)
|
||||
20. 对可能影响性能的代码(如主线程阻塞、过度绘制、内存泄漏风险)提供优化建议
|
||||
21. 确保异常处理和加载状态管理,防止应用崩溃和 ANR
|
||||
|
||||
## 架构感知
|
||||
22. 优先分析现有架构模式(MVC/MVP/MVVM/Clean Architecture)与依赖注入方式,避免创建冗余组件
|
||||
23. 添加功能时,优先考虑复用 ViewModel、Repository 或现有组件
|
||||
24. 如遇架构不清晰,先梳理组件层次与数据流,再执行修改
|
||||
|
||||
## 代码变更的可追溯性
|
||||
25. 提供清晰的 commit 信息,描述组件变更和影响范围
|
||||
26. 对于 UI 组件重大调整,生成变更文档与截图对比
|
||||
27. API 或接口变更时,提供向下兼容方案或迁移指南
|
||||
28. 执行任务前,先分析项目结构和组件关系文档
|
||||
29. 每次修改后,生成任务总结,说明组件变更和状态管理调整
|
||||
30. 手动维护组件文档与架构说明,确保长期可维护性
|
||||
|
||||
## Android 开发规则
|
||||
31. 严格遵循 Android 生命周期管理,避免内存泄漏和崩溃
|
||||
32. 处理好 Activity/Fragment 之间的数据传递,优先使用 ViewModel 共享数据
|
||||
33. UI 操作必须在主线程执行,耗时操作放在工作线程
|
||||
34. 合理使用协程(Kotlin)或 RxJava(Java)进行异步操作
|
||||
35. 注意适配不同屏幕尺寸和系统版本的兼容性问题
|
||||
36. 使用 Android Jetpack 组件(如 Navigation、Room、WorkManager)提高开发效率
|
||||
37. 遵循 Material Design 设计规范,保持 UI 一致性
|
||||
38. 注意权限管理和安全性,特别是涉及敏感数据的操作
|
||||
39. 优化应用启动速度和 UI 渲染性能
|
||||
40. 合理使用资源文件(strings.xml、colors.xml、styles.xml)提高可维护性
|
||||
38
.cursor/rules/frameworks/django.mdc
Normal file
38
.cursor/rules/frameworks/django.mdc
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
description: Django 后端开发的约定和最佳实践。
|
||||
globs: **/*.py
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Django 规则
|
||||
|
||||
- 使用 `python manage.py startapp` 在项目中创建新应用
|
||||
- 在 `models.py` 中保存模型,并在 `admin.py` 中注册以使用管理界面
|
||||
- 使用 Django 的 ORM 而非原始 SQL 查询
|
||||
- 使用 `select_related` 和 `prefetch_related` 避免 N+1 查询问题:
|
||||
|
||||
```python
|
||||
# 良好模式
|
||||
users = User.objects.select_related('profile')
|
||||
posts = Post.objects.prefetch_related('tags')
|
||||
```
|
||||
|
||||
- 使用 Django 表单进行验证:
|
||||
|
||||
```python
|
||||
class UserForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['username', 'email']
|
||||
```
|
||||
|
||||
- 为常见查询创建自定义模型管理器:
|
||||
|
||||
```python
|
||||
class ActiveUserManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(is_active=True)
|
||||
```
|
||||
|
||||
- 使用 Django 内置的身份验证系统
|
||||
- 在环境变量中存储设置并通过 `settings.py` 访问
|
||||
16
.cursor/rules/frameworks/fastapi.mdc
Normal file
16
.cursor/rules/frameworks/fastapi.mdc
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
description: FastAPI 高性能 Python API 的约定和最佳实践。
|
||||
globs: **/*.py
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# FastAPI 规则
|
||||
|
||||
- 为所有函数参数和返回值使用类型提示
|
||||
- 使用 Pydantic 模型进行请求和响应验证
|
||||
- 在路径操作装饰器中使用适当的 HTTP 方法(@app.get、@app.post 等)
|
||||
- 使用依赖注入实现共享逻辑,如数据库连接和身份验证
|
||||
- 使用后台任务(background tasks)进行非阻塞操作
|
||||
- 使用适当的状态码进行响应(201 表示创建,404 表示未找到等)
|
||||
- 使用 APIRouter 按功能或资源组织路由
|
||||
- 适当使用路径参数、查询参数和请求体
|
||||
16
.cursor/rules/frameworks/flask.mdc
Normal file
16
.cursor/rules/frameworks/flask.mdc
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
description: Flask 轻量级 Python Web 应用程序的约定和最佳实践。
|
||||
globs: **/*.py
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Flask 规则
|
||||
|
||||
- 使用 Blueprints 按功能或资源组织路由
|
||||
- 使用 Flask-SQLAlchemy 处理数据库模型和 ORM
|
||||
- 使用应用工厂(application factories)实现灵活的应用初始化
|
||||
- 使用 Flask 扩展实现常见功能(Flask-Login、Flask-WTF 等)
|
||||
- 在环境变量中存储配置
|
||||
- 使用 Flask-Migrate 进行数据库迁移
|
||||
- 使用错误处理器实现适当的错误处理
|
||||
- 使用 Flask-RESTful 或类似工具构建 API
|
||||
41
.cursor/rules/frameworks/flutter.mdc
Normal file
41
.cursor/rules/frameworks/flutter.mdc
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
description: 该规则解释了 Flutter 小部件模式和跨平台移动开发的最佳实践。
|
||||
globs: **/*.dart
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Flutter 规则
|
||||
|
||||
- 对于没有内部状态的 UI 组件使用 StatelessWidget。
|
||||
- 对于需要维护状态的组件使用 StatefulWidget:
|
||||
|
||||
```dart
|
||||
class Counter extends StatefulWidget {
|
||||
@override
|
||||
_CounterState createState() => _CounterState();
|
||||
}
|
||||
|
||||
class _CounterState extends State<Counter> {
|
||||
int _count = 0;
|
||||
|
||||
void _increment() {
|
||||
setState(() { _count++; });
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Text('Count: $_count'),
|
||||
ElevatedButton(onPressed: _increment, child: Text('Increment')),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- 对于复杂应用使用状态管理解决方案(Provider、Bloc、Riverpod)。
|
||||
- 使用适当的文件夹结构组织代码(models、screens、widgets、services)。
|
||||
- 使用命名路由和 Navigator.pushNamed() 进行导航。
|
||||
- 使用 async/await 处理异步操作,并进行适当的错误处理。
|
||||
- 使用主题(themes)在整个应用中保持一致的样式。
|
||||
21
.cursor/rules/frameworks/nextjs.mdc
Normal file
21
.cursor/rules/frameworks/nextjs.mdc
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
description: 该规则解释了 Next.js 全栈开发的约定和最佳实践。
|
||||
globs: **/*.js,**/*.jsx,**/*.ts,**/*.tsx
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Next.js 规则
|
||||
|
||||
- 使用 App Router 结构,在路由目录中使用 `page.tsx` 文件。
|
||||
- 客户端组件必须在文件顶部明确标记 `'use client'`。
|
||||
- 目录名使用 kebab-case(例如 `components/auth-form`),组件文件使用 PascalCase。
|
||||
- 优先使用命名导出而非默认导出,即使用 `export function Button() { /* ... */ }` 而不是 `export default function Button() { /* ... */ }`。
|
||||
- 尽量减少 `'use client'` 指令:
|
||||
- 保持大多数组件为 React Server Components (RSC)
|
||||
- 仅在需要交互性时使用客户端组件,并用带有 fallback UI 的 `Suspense` 包装
|
||||
- 为交互元素创建小型客户端组件包装器
|
||||
- 尽可能避免不必要的 `useState` 和 `useEffect`:
|
||||
- 使用服务器组件进行数据获取
|
||||
- 使用 React Server Actions 处理表单
|
||||
- 使用 URL 搜索参数实现可共享状态
|
||||
- 使用 `nuqs` 管理 URL 搜索参数状态
|
||||
104
.cursor/rules/frameworks/react-native.mdc
Normal file
104
.cursor/rules/frameworks/react-native.mdc
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
description: 该规则解释了 TypeScript、React Native、Expo 和移动 UI 开发的使用方法和最佳实践。
|
||||
globs: **/*.jsx,**/*.tsx
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# TypeScript、React Native、Expo 和移动 UI 开发规则
|
||||
|
||||
## 代码风格和结构
|
||||
- 编写清晰、可读的代码:确保你的代码易于阅读和理解。为变量和函数使用描述性名称。
|
||||
- 使用函数组件:优先使用带有钩子(useState, useEffect 等)的函数组件,而非类组件。
|
||||
- 组件模块化:将组件拆分为更小、可重用的部分。保持组件专注于单一职责。
|
||||
- 按功能组织文件:将相关组件、钩子和样式按功能特性分组到目录中(例如,user-profile)。
|
||||
|
||||
## 命名约定
|
||||
- 变量和函数:使用驼峰命名法(camelCase)命名变量和函数,并具有描述性(例如,isFetchingData, handleUserInput)。
|
||||
- 组件:使用帕斯卡命名法(PascalCase)命名组件(例如,UserProfile)。
|
||||
- 目录:使用小写和连字符命名目录(例如,user-profile)。
|
||||
|
||||
## TypeScript 使用
|
||||
- 所有代码使用 TypeScript;接口(interfaces)优于类型(types)
|
||||
- 避免使用枚举(enums);使用映射(maps)代替
|
||||
- 使用带有 TypeScript 接口的函数组件
|
||||
- 在 TypeScript 中使用严格模式以提高类型安全性
|
||||
|
||||
## 语法和格式
|
||||
- 使用 "function" 关键字定义纯函数
|
||||
- 避免在条件语句中使用不必要的花括号;简单语句使用简洁语法
|
||||
- 使用声明式 JSX
|
||||
- 使用 Prettier 保持代码格式一致
|
||||
|
||||
## UI 和样式
|
||||
- 使用 Expo 内置组件实现常见 UI 模式和布局
|
||||
- 使用 Flexbox 和 Expo 的 useWindowDimensions 实现响应式设计
|
||||
- 使用 styled-components 或 Tailwind CSS 进行组件样式设计
|
||||
- 使用 Expo 的 useColorScheme 实现深色模式支持
|
||||
- 确保高可访问性(a11y)标准,使用 ARIA 角色和原生可访问性属性
|
||||
- 利用 react-native-reanimated 和 react-native-gesture-handler 实现高性能动画和手势
|
||||
|
||||
## 安全区域管理
|
||||
- 使用 react-native-safe-area-context 中的 SafeAreaProvider 全局管理安全区域
|
||||
- 用 SafeAreaView 包装顶层组件,处理 iOS 和 Android 上的刘海、状态栏和其他屏幕缩进
|
||||
- 使用 SafeAreaScrollView 处理可滚动内容,确保其尊重安全区域边界
|
||||
- 避免为安全区域硬编码内边距或外边距;依赖 SafeAreaView 和上下文钩子
|
||||
|
||||
## 性能优化
|
||||
- 最小化 useState 和 useEffect 的使用;优先使用 context 和 reducers 进行状态管理
|
||||
- 使用 Expo 的 AppLoading 和 SplashScreen 优化应用启动体验
|
||||
- 优化图像:在支持的地方使用 WebP 格式,包含尺寸数据,使用 expo-image 实现延迟加载
|
||||
- 使用 React 的 Suspense 和动态导入实现代码分割和非关键组件的懒加载
|
||||
- 使用 React Native 内置工具和 Expo 调试功能监控性能
|
||||
- 通过适当使用组件记忆化、useMemo 和 useCallback 钩子避免不必要的重新渲染
|
||||
|
||||
## 导航
|
||||
- 使用 react-navigation 进行路由和导航;遵循其栈导航器、标签导航器和抽屉导航器的最佳实践
|
||||
- 利用深度链接和通用链接提升用户参与度和导航流程
|
||||
- 使用 expo-router 的动态路由以获得更好的导航处理
|
||||
|
||||
## 状态管理
|
||||
- 使用 React Context 和 useReducer 管理全局状态
|
||||
- 利用 react-query 进行数据获取和缓存;避免过多的 API 调用
|
||||
- 对于复杂的状态管理,考虑使用 Zustand 或 Redux Toolkit
|
||||
- 使用 expo-linking 等库处理 URL 搜索参数
|
||||
|
||||
## 错误处理和验证
|
||||
- 使用 Zod 进行运行时验证和错误处理
|
||||
- 使用 Sentry 或类似服务实现适当的错误日志记录
|
||||
- 优先处理错误和边缘情况:
|
||||
- 在函数开始时处理错误
|
||||
- 为错误条件使用提前返回,避免深度嵌套的 if 语句
|
||||
- 避免不必要的 else 语句;使用 if-return 模式
|
||||
- 实现全局错误边界以捕获和处理意外错误
|
||||
- 使用 expo-error-reporter 记录和报告生产环境中的错误
|
||||
|
||||
## 测试
|
||||
- 使用 Jest 和 React Native Testing Library 编写单元测试
|
||||
- 使用 Detox 为关键用户流程实现集成测试
|
||||
- 使用 Expo 的测试工具在不同环境中运行测试
|
||||
- 考虑为组件使用快照测试以确保 UI 一致性
|
||||
|
||||
## 安全
|
||||
- 清理用户输入以防止 XSS 攻击
|
||||
- 使用 react-native-encrypted-storage 安全存储敏感数据
|
||||
- 确保使用 HTTPS 和适当的身份验证与 API 进行安全通信
|
||||
- 使用 Expo 的安全指南保护应用程序:https://docs.expo.dev/guides/security/
|
||||
|
||||
## 国际化 (i18n)
|
||||
- 使用 react-native-i18n 或 expo-localization 进行国际化和本地化
|
||||
- 支持多语言和 RTL 布局
|
||||
- 确保文本缩放和字体调整以提高可访问性
|
||||
|
||||
## 关键约定
|
||||
1. 依赖 Expo 的托管工作流程简化开发和部署
|
||||
2. 优先考虑移动 Web 性能指标(加载时间、卡顿和响应性)
|
||||
3. 使用 expo-constants 管理环境变量和配置
|
||||
4. 使用 expo-permissions 优雅处理设备权限
|
||||
5. 实现 expo-updates 进行空中(OTA)更新
|
||||
6. 遵循 Expo 的应用部署和发布最佳实践:https://docs.expo.dev/distribution/introduction/
|
||||
7. 通过在 iOS 和 Android 平台上进行广泛测试,确保兼容性
|
||||
|
||||
## API 文档
|
||||
- 使用 Expo 官方文档设置和配置项目:https://docs.expo.dev/
|
||||
|
||||
请参考 Expo 文档获取有关 Views、Blueprints 和 Extensions 的最佳实践详细信息。
|
||||
79
.cursor/rules/frameworks/react.mdc
Normal file
79
.cursor/rules/frameworks/react.mdc
Normal file
@@ -0,0 +1,79 @@
|
||||
---
|
||||
description: 该规则解释了 React 组件模式、hooks 使用方法和最佳实践。
|
||||
globs: **/*.jsx,**/*.tsx
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# React 规则
|
||||
|
||||
## 组件结构
|
||||
- 优先使用函数组件而非类组件
|
||||
- 保持组件小巧且专注
|
||||
- 将可复用逻辑提取到自定义 hook 中
|
||||
- 使用组合而非继承
|
||||
- 使用 TypeScript 实现适当的 prop 类型
|
||||
- 将大型组件拆分为更小、更专注的组件
|
||||
|
||||
## Hooks
|
||||
- 遵循 Hooks 的规则
|
||||
- 使用自定义 hooks 实现可复用逻辑
|
||||
- 保持 hooks 专注且简单
|
||||
- 在 useEffect 中使用适当的依赖数组
|
||||
- 在需要时在 useEffect 中实现清理功能
|
||||
- 避免嵌套 hooks
|
||||
|
||||
## 状态管理
|
||||
- 使用 useState 管理组件本地状态
|
||||
- 使用 useReducer 处理复杂状态逻辑
|
||||
- 使用 Context API 共享状态
|
||||
- 将状态尽可能靠近使用它的地方
|
||||
- 通过适当的状态管理避免 prop drilling
|
||||
- 仅在必要时使用状态管理库
|
||||
|
||||
## 性能
|
||||
- 实现适当的记忆化(useMemo, useCallback)
|
||||
- 对开销大的组件使用 React.memo
|
||||
- 避免不必要的重新渲染
|
||||
- 实现适当的懒加载
|
||||
- 在列表中使用适当的 key 属性
|
||||
- 分析并优化渲染性能
|
||||
|
||||
## 表单
|
||||
- 对表单输入使用受控组件
|
||||
- 实现适当的表单验证
|
||||
- 正确处理表单提交状态
|
||||
- 显示适当的加载和错误状态
|
||||
- 对复杂表单使用表单库
|
||||
- 为表单实现适当的可访问性
|
||||
|
||||
## 错误处理
|
||||
- 实现 Error Boundaries
|
||||
- 正确处理异步错误
|
||||
- 显示用户友好的错误信息
|
||||
- 实现适当的备用 UI
|
||||
- 适当记录错误
|
||||
- 优雅处理边缘情况
|
||||
|
||||
## 测试
|
||||
- 为组件编写单元测试
|
||||
- 为复杂流程实现集成测试
|
||||
- 使用 React Testing Library
|
||||
- 测试用户交互
|
||||
- 测试错误场景
|
||||
- 实现适当的模拟数据
|
||||
|
||||
## 可访问性
|
||||
- 使用语义化 HTML 元素
|
||||
- 实现适当的 ARIA 属性
|
||||
- 确保键盘导航
|
||||
- 使用屏幕阅读器测试
|
||||
- 管理焦点
|
||||
- 为图片提供适当的 alt 文本
|
||||
|
||||
## 代码组织
|
||||
- 将相关组件组织在一起
|
||||
- 使用适当的文件命名约定
|
||||
- 实现适当的目录结构
|
||||
- 保持样式靠近组件
|
||||
- 使用适当的导入/导出
|
||||
- 记录复杂的组件逻辑
|
||||
293
.cursor/rules/frameworks/springboot.mdc
Normal file
293
.cursor/rules/frameworks/springboot.mdc
Normal file
@@ -0,0 +1,293 @@
|
||||
---
|
||||
description: Spring Boot 3 企业级最佳实践规范
|
||||
globs: **/*.java
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Spring Boot 3 企业级最佳实践规范
|
||||
|
||||
## 1. 配置管理模块
|
||||
|
||||
### 1.1 配置文件组织
|
||||
- **主配置文件**:`application.yml` 包含通用配置
|
||||
- **环境配置**:`application-{profile}.yml` 按环境分离
|
||||
- **配置优先级**:命令行参数 > 环境变量 > 配置文件
|
||||
- **敏感信息**:使用环境变量或配置中心,禁止硬编码
|
||||
|
||||
### 1.2 配置属性绑定
|
||||
- 使用 `@ConfigurationProperties` 进行类型安全的配置绑定
|
||||
- 配置类使用 `@Validated` 进行参数校验
|
||||
- 复杂配置使用嵌套类结构
|
||||
- 提供默认值和配置文档
|
||||
|
||||
### 1.3 多环境管理
|
||||
- **开发环境**:本地数据库,详细日志,热重载
|
||||
- **测试环境**:内存数据库,模拟外部服务
|
||||
- **生产环境**:外部配置,最小日志级别,性能监控
|
||||
|
||||
### 1.4 配置最佳实践
|
||||
- 配置项命名使用 kebab-case
|
||||
- 布尔值配置明确语义(enabled/disabled)
|
||||
- 数值配置包含单位说明
|
||||
- 定期审查和清理无用配置
|
||||
|
||||
## 2. 依赖注入模块
|
||||
|
||||
### 2.1 Bean 定义策略
|
||||
- **组件扫描**:使用 `@Component`、`@Service`、`@Repository`、`@Controller`
|
||||
- **配置类**:复杂 Bean 使用 `@Configuration` + `@Bean`
|
||||
- **条件注册**:使用 `@ConditionalOn*` 注解进行条件装配
|
||||
- **作用域管理**:明确 Bean 的生命周期和作用域
|
||||
|
||||
### 2.2 依赖注入方式
|
||||
- **构造器注入**:推荐方式,保证依赖不可变
|
||||
- **字段注入**:仅在测试中使用 `@Autowired`
|
||||
- **Setter注入**:可选依赖使用
|
||||
- **避免循环依赖**:重构代码结构,使用事件驱动
|
||||
|
||||
### 2.3 Bean 生命周期管理
|
||||
- 使用 `@PostConstruct` 和 `@PreDestroy` 管理生命周期
|
||||
- 实现 `InitializingBean` 和 `DisposableBean` 接口
|
||||
- 资源清理在销毁方法中进行
|
||||
- 异步初始化使用 `@Async` 注解
|
||||
|
||||
### 2.4 依赖注入最佳实践
|
||||
- 接口编程,面向抽象依赖
|
||||
- 使用 `@Qualifier` 解决多实现问题
|
||||
- 避免过度依赖,保持类的单一职责
|
||||
- 使用 `@Primary` 指定默认实现
|
||||
|
||||
## 3. 安全模块
|
||||
|
||||
### 3.1 认证机制
|
||||
- **JWT 认证**:无状态认证,适合分布式应用
|
||||
- **OAuth2 集成**:第三方登录和授权
|
||||
- **多因素认证**:提高安全级别
|
||||
- **会话管理**:合理设置超时和并发控制
|
||||
|
||||
### 3.2 授权策略
|
||||
- **基于角色**:RBAC 模型,角色权限分离
|
||||
- **基于资源**:细粒度权限控制
|
||||
- **方法级安全**:使用 `@PreAuthorize` 和 `@PostAuthorize`
|
||||
- **URL 级安全**:配置路径访问规则
|
||||
|
||||
### 3.3 数据安全
|
||||
- **输入验证**:所有外部输入必须验证
|
||||
- **SQL 注入防护**:使用参数化查询
|
||||
- **XSS 防护**:输出编码和 CSP 策略
|
||||
- **CSRF 防护**:API 使用 Token 验证
|
||||
|
||||
### 3.4 安全配置最佳实践
|
||||
- 最小权限原则,默认拒绝访问
|
||||
- 敏感操作记录审计日志
|
||||
- 定期更新安全依赖
|
||||
- 使用 HTTPS 和安全头配置
|
||||
|
||||
## 4. 性能优化模块
|
||||
|
||||
### 4.1 应用层优化
|
||||
- **连接池配置**:数据库、Redis、HTTP 客户端
|
||||
- **线程池调优**:异步任务和定时任务
|
||||
- **JVM 参数**:堆内存、GC 策略、监控参数
|
||||
- **启动优化**:延迟初始化、条件装配
|
||||
|
||||
### 4.2 缓存策略
|
||||
- **本地缓存**:Caffeine 用于热点数据
|
||||
- **分布式缓存**:Redis 用于共享数据
|
||||
- **缓存层次**:L1(本地)+ L2(分布式)
|
||||
- **缓存更新**:写入时更新、定时刷新、事件驱动
|
||||
|
||||
### 4.3 数据库优化
|
||||
- **连接池配置**:HikariCP 参数调优
|
||||
- **查询优化**:索引使用、分页查询、批量操作
|
||||
- **事务管理**:只读事务、事务传播、超时设置
|
||||
- **读写分离**:主从配置、路由策略
|
||||
|
||||
### 4.4 监控和诊断
|
||||
- **应用指标**:JVM、业务指标、自定义指标
|
||||
- **性能分析**:慢查询、热点方法识别
|
||||
- **告警机制**:阈值监控、异常告警
|
||||
- **健康检查**:Actuator 端点监控应用状态
|
||||
|
||||
## 5. 数据访问模块
|
||||
|
||||
### 5.1 JPA 最佳实践
|
||||
- **实体设计**:合理的表关系、字段映射、索引策略
|
||||
- **Repository 模式**:继承 JpaRepository,自定义查询方法
|
||||
- **查询优化**:使用 `@Query` 注解、原生 SQL、Specification
|
||||
- **懒加载策略**:避免 N+1 问题,合理使用 `@EntityGraph`
|
||||
|
||||
### 5.2 事务管理
|
||||
- **声明式事务**:`@Transactional` 注解配置
|
||||
- **事务传播**:根据业务场景选择传播行为
|
||||
- **只读事务**:查询操作使用 `readOnly = true`
|
||||
- **事务超时**:设置合理的超时时间
|
||||
|
||||
### 5.3 数据库连接管理
|
||||
- **连接池配置**:最大连接数、超时设置、健康检查
|
||||
- **多数据源**:主从分离、分库分表支持
|
||||
- **连接泄漏检测**:监控长时间占用的连接
|
||||
- **数据库监控**:连接数、慢查询、死锁检测
|
||||
|
||||
### 5.4 数据访问安全
|
||||
- **参数化查询**:防止 SQL 注入
|
||||
- **数据脱敏**:敏感数据加密存储
|
||||
- **访问控制**:数据库用户权限最小化
|
||||
- **审计日志**:记录数据变更操作
|
||||
|
||||
## 6. API 设计模块(RESTful)
|
||||
|
||||
### 6.1 URL 设计规范
|
||||
- **资源命名**:使用名词复数形式,避免动词
|
||||
- **层次结构**:体现资源间的关系
|
||||
- **版本控制**:URL 路径或请求头中包含版本信息
|
||||
- **查询参数**:过滤、排序、分页使用查询参数
|
||||
|
||||
### 6.2 HTTP 方法使用
|
||||
- **GET**:获取资源,幂等操作
|
||||
- **POST**:创建资源,非幂等操作
|
||||
- **PUT**:完整更新资源,幂等操作
|
||||
- **PATCH**:部分更新资源
|
||||
- **DELETE**:删除资源,幂等操作
|
||||
|
||||
### 6.3 响应设计
|
||||
- **状态码**:正确使用 HTTP 状态码
|
||||
- **响应格式**:统一的 JSON 响应结构
|
||||
- **错误处理**:标准化错误响应格式
|
||||
- **分页响应**:包含总数、页码、页大小信息
|
||||
|
||||
### 6.4 API 文档和测试
|
||||
- **OpenAPI 规范**:使用 Swagger 生成文档
|
||||
- **接口测试**:单元测试、集成测试、契约测试
|
||||
- **版本兼容**:向后兼容性保证
|
||||
- **性能测试**:接口响应时间和并发测试
|
||||
|
||||
## 7. 异常处理模块
|
||||
|
||||
### 7.1 异常分类
|
||||
- **业务异常**:可预期的业务逻辑异常
|
||||
- **系统异常**:不可预期的技术异常
|
||||
- **验证异常**:参数校验失败异常
|
||||
- **外部服务异常**:第三方服务调用异常
|
||||
|
||||
### 7.2 异常处理策略
|
||||
- **全局异常处理**:使用 `@ControllerAdvice` 统一处理
|
||||
- **异常转换**:将底层异常转换为业务异常
|
||||
- **异常日志**:记录异常堆栈和上下文信息
|
||||
- **用户友好**:返回用户可理解的错误信息
|
||||
|
||||
### 7.3 异常响应格式
|
||||
- **错误码**:业务错误码和 HTTP 状态码
|
||||
- **错误信息**:简洁明了的错误描述
|
||||
- **详细信息**:开发环境提供详细错误信息
|
||||
- **请求追踪**:包含请求 ID 便于问题定位
|
||||
|
||||
### 7.4 异常监控
|
||||
- **异常统计**:异常类型、频率统计
|
||||
- **告警机制**:异常阈值告警
|
||||
- **异常分析**:定期分析异常趋势
|
||||
- **异常恢复**:自动重试和降级策略
|
||||
|
||||
## 8. 测试模块
|
||||
|
||||
### 8.1 测试分层策略
|
||||
- **单元测试**:测试单个类或方法,使用 Mock
|
||||
- **集成测试**:测试组件间交互,使用 TestContainers
|
||||
- **端到端测试**:完整业务流程测试
|
||||
- **性能测试**:负载测试、压力测试
|
||||
|
||||
### 8.2 测试工具和框架
|
||||
- **JUnit 5**:测试框架,支持参数化测试
|
||||
- **Mockito**:Mock 框架,模拟依赖对象
|
||||
- **TestContainers**:集成测试中使用真实数据库
|
||||
- **WireMock**:模拟外部 HTTP 服务
|
||||
|
||||
### 8.3 测试数据管理
|
||||
- **测试数据隔离**:每个测试独立的数据环境
|
||||
- **数据准备**:使用 `@Sql` 或 Builder 模式
|
||||
- **数据清理**:测试后清理数据,避免影响其他测试
|
||||
- **测试数据工厂**:统一的测试数据创建
|
||||
|
||||
### 8.4 测试质量保证
|
||||
- **代码覆盖率**:目标覆盖率 80% 以上
|
||||
- **测试命名**:清晰的测试方法命名
|
||||
- **断言明确**:使用有意义的断言消息
|
||||
- **测试维护**:定期更新和重构测试代码
|
||||
|
||||
## 9. 日志记录模块
|
||||
|
||||
### 9.1 日志级别管理
|
||||
- **ERROR**:系统错误,需要立即处理
|
||||
- **WARN**:警告信息,需要关注
|
||||
- **INFO**:重要业务信息,正常流程记录
|
||||
- **DEBUG**:调试信息,开发环境使用
|
||||
|
||||
### 9.2 日志内容规范
|
||||
- **结构化日志**:使用 JSON 格式,便于解析
|
||||
- **上下文信息**:包含用户 ID、请求 ID、业务标识
|
||||
- **敏感信息**:避免记录密码、身份证等敏感数据
|
||||
- **性能信息**:记录关键操作的执行时间
|
||||
|
||||
### 9.3 日志输出配置
|
||||
- **控制台输出**:开发环境使用,格式化显示
|
||||
- **文件输出**:生产环境使用,按日期滚动
|
||||
- **远程日志**:集中式日志收集,如 ELK Stack
|
||||
- **日志压缩**:历史日志压缩存储
|
||||
|
||||
### 9.4 日志监控和分析
|
||||
- **日志聚合**:统一收集和存储
|
||||
- **实时监控**:关键错误实时告警
|
||||
- **日志分析**:业务指标分析、异常趋势分析
|
||||
- **日志检索**:快速定位问题日志
|
||||
|
||||
## 10. 应用监控模块
|
||||
|
||||
### 10.1 Spring Boot Actuator
|
||||
- **端点配置**:暴露必要的监控端点
|
||||
- **健康检查**:自定义健康指示器
|
||||
- **指标收集**:JVM、应用、业务指标
|
||||
- **信息端点**:应用版本、构建信息
|
||||
|
||||
### 10.2 自定义监控
|
||||
- **业务指标**:使用 Micrometer 收集业务数据
|
||||
- **性能监控**:方法执行时间、数据库查询性能
|
||||
- **错误监控**:异常统计和分析
|
||||
- **用户行为**:关键业务操作追踪
|
||||
|
||||
### 10.3 日志与监控集成
|
||||
- **结构化日志**:便于监控系统解析
|
||||
- **关键事件记录**:业务关键节点日志
|
||||
- **性能日志**:慢操作和资源使用情况
|
||||
- **告警配置**:基于日志和指标的告警
|
||||
|
||||
### 10.4 生产环境监控
|
||||
- **应用状态**:启动、运行、关闭状态监控
|
||||
- **资源使用**:内存、CPU、线程池状态
|
||||
- **外部依赖**:数据库、缓存、第三方服务状态
|
||||
- **业务监控**:核心业务指标实时监控
|
||||
|
||||
## 11. 代码质量模块
|
||||
|
||||
### 11.1 编码规范
|
||||
- **命名规范**:类名、方法名、变量名清晰表达意图
|
||||
- **代码结构**:合理的包结构和类层次
|
||||
- **注释规范**:必要的类和方法注释
|
||||
- **代码复用**:避免重复代码,提取公共方法
|
||||
|
||||
### 11.2 设计原则
|
||||
- **SOLID 原则**:单一职责、开闭原则等
|
||||
- **DRY 原则**:不重复自己
|
||||
- **KISS 原则**:保持简单
|
||||
- **YAGNI 原则**:你不会需要它
|
||||
|
||||
### 11.3 代码审查
|
||||
- **Pull Request**:代码合并前必须审查
|
||||
- **审查清单**:功能、性能、安全、可维护性
|
||||
- **自动化检查**:静态代码分析工具
|
||||
- **知识分享**:通过代码审查传播最佳实践
|
||||
|
||||
### 11.4 重构策略
|
||||
- **持续重构**:小步快跑,持续改进
|
||||
- **测试保护**:重构前确保测试覆盖
|
||||
- **重构时机**:新功能开发时同步重构
|
||||
- **技术债务**:定期评估和偿还技术债务
|
||||
16
.cursor/rules/frameworks/swiftui.mdc
Normal file
16
.cursor/rules/frameworks/swiftui.mdc
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
description: 该规则解释了 SwiftUI 在 iOS、macOS、watchOS 和 tvOS 开发中的模式和最佳实践。
|
||||
globs: **/*.swift
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# SwiftUI 规则
|
||||
|
||||
- 使用结构体(struct)创建视图,并保持其小巧和专注
|
||||
- 使用 @State 管理简单的视图本地状态
|
||||
- 使用带有 @Published 的 @ObservableObject 管理共享状态
|
||||
- 使用 @Binding 将可变状态传递给子视图
|
||||
- 创建自定义 ViewModifiers 实现可复用的样式
|
||||
- 使用环境对象(environment objects)进行依赖注入
|
||||
- 对大型集合使用 LazyVStack 和 LazyHStack
|
||||
- 将复杂的视图逻辑提取到单独的组件中
|
||||
50
.cursor/rules/frameworks/tailwind.mdc
Normal file
50
.cursor/rules/frameworks/tailwind.mdc
Normal file
@@ -0,0 +1,50 @@
|
||||
---
|
||||
description: 该规则解释了 Tailwind CSS 约定、实用工具类和现代 UI 开发的最佳实践。
|
||||
globs: **/*.css
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Tailwind CSS 规则
|
||||
|
||||
- 使用响应式前缀实现移动优先设计:
|
||||
|
||||
```html
|
||||
<div class="w-full md:w-1/2 lg:w-1/3">
|
||||
<!-- 移动设备上全宽,中等屏幕上占一半,大屏幕上占三分之一 -->
|
||||
</div>
|
||||
```
|
||||
|
||||
- 为交互元素使用状态变体:
|
||||
|
||||
```html
|
||||
<button class="bg-blue-500 hover:bg-blue-600 focus:ring-2">
|
||||
点击我
|
||||
</button>
|
||||
```
|
||||
|
||||
- 必要时使用 @apply 处理重复模式:
|
||||
|
||||
```css
|
||||
@layer components {
|
||||
.btn-primary {
|
||||
@apply px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- 对特定需求使用任意值:
|
||||
|
||||
```html
|
||||
<div class="top-[117px] grid-cols-[1fr_2fr]">
|
||||
<!-- 自定义定位和网格布局 -->
|
||||
</div>
|
||||
```
|
||||
|
||||
- 使用间距工具实现一致的布局:
|
||||
|
||||
```html
|
||||
<div class="space-y-4">
|
||||
<div>项目 1</div>
|
||||
<div>项目 2</div>
|
||||
</div>
|
||||
```
|
||||
87
.cursor/rules/frameworks/vuejs.mdc
Normal file
87
.cursor/rules/frameworks/vuejs.mdc
Normal file
@@ -0,0 +1,87 @@
|
||||
---
|
||||
description: Vue.js 编码规则和最佳实践
|
||||
globs: **/*.vue
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Vue.js 规则
|
||||
|
||||
## 组件结构
|
||||
- 使用组合式 API 而非选项式 API
|
||||
- 保持组件小巧且专注
|
||||
- 正确集成 TypeScript
|
||||
- 实现适当的 props 验证
|
||||
- 使用正确的 emit 声明
|
||||
- 保持模板逻辑简洁
|
||||
|
||||
## 组合式 API
|
||||
- 正确使用 ref 和 reactive
|
||||
- 实现适当的生命周期钩子
|
||||
- 使用 composables 实现可复用逻辑
|
||||
- 保持 setup 函数整洁
|
||||
- 正确使用计算属性
|
||||
- 实现适当的侦听器
|
||||
|
||||
## 状态管理
|
||||
- 使用 Pinia 进行状态管理
|
||||
- 保持 stores 模块化
|
||||
- 使用适当的状态组合
|
||||
- 实现适当的 actions
|
||||
- 正确使用 getters
|
||||
- 适当处理异步状态
|
||||
|
||||
## 性能
|
||||
- 正确使用组件懒加载
|
||||
- 实现适当的缓存
|
||||
- 正确使用计算属性
|
||||
- 避免不必要的侦听器
|
||||
- 正确使用 v-show 与 v-if
|
||||
- 实现适当的 key 管理
|
||||
|
||||
## 路由
|
||||
- 正确使用 Vue Router
|
||||
- 实现适当的导航守卫
|
||||
- 正确使用路由元字段
|
||||
- 适当处理路由参数
|
||||
- 实现适当的懒加载
|
||||
- 使用适当的导航方法
|
||||
|
||||
## 表单
|
||||
- 正确使用 v-model
|
||||
- 实现适当的验证
|
||||
- 适当处理表单提交
|
||||
- 显示适当的加载状态
|
||||
- 使用适当的错误处理
|
||||
- 实现适当的表单重置
|
||||
|
||||
## TypeScript 集成
|
||||
- 使用适当的组件类型定义
|
||||
- 实现适当的 prop 类型
|
||||
- 使用适当的 emit 声明
|
||||
- 处理适当的类型推断
|
||||
- 使用适当的 composable 类型
|
||||
- 实现适当的 store 类型
|
||||
|
||||
## 测试
|
||||
- 编写适当的单元测试
|
||||
- 实现适当的组件测试
|
||||
- 正确使用 Vue Test Utils
|
||||
- 适当测试 composables
|
||||
- 实现适当的模拟
|
||||
- 测试异步操作
|
||||
|
||||
## 最佳实践
|
||||
- 遵循 Vue 风格指南
|
||||
- 使用适当的命名约定
|
||||
- 保持组件组织有序
|
||||
- 实现适当的错误处理
|
||||
- 使用适当的事件处理
|
||||
- 为复杂逻辑编写文档
|
||||
|
||||
## 构建和工具
|
||||
- 使用 Vite 进行开发
|
||||
- 配置适当的构建设置
|
||||
- 正确使用环境变量
|
||||
- 实现适当的代码分割
|
||||
- 使用适当的资源处理
|
||||
- 配置适当的优化
|
||||
Reference in New Issue
Block a user