姚利锋
姚利锋
首页博客片段项目服务关于
☕
❤️
目录
  • 无目录
返回片段

发布于  2025 年 5 月 5 日,星期一

Cursor mdc规则学习总结

MDC(Material Design Components)中Cursor样式的规范与实践应用,包括交互状态下指针形态的设计原则、状态反馈逻辑及无障碍适配要点。核心涉及hover/focus/active等场景的视觉一致性处理,如何通过CSS变量和JavaScript动态控制光标类型以符合Material Design 3的交互标准,并对比默认浏览器行为与MDC定制方案的差异。本质是解析组件库对用户操作意图的视觉传达机制,强调光标变化与功能预期的语义关联性,例如拖拽操作中的grab光标或禁用状态的not-allowed实现细节。

Cursor mdc 规则学习总结

  • Cursor mdc 规则示例https://github.com/elie222/inbox-zero/tree/main/.cursor/rules
  • Cursor 官方已废弃 .cursorules,主推 Project Rules。

一、新建配置

新建 Project Rules

创建 Project Rules 有两种方式,一种是 可视化方式,一种是 手动创建

可视化方式

进入 Cursor 设置页面,点击【General】找到【Project Rules】 在这里插入图片描述

点击【Add new rule】,输入规则文件名称 在这里插入图片描述

创建完成就可以看到在项目根目录多了一个 .cursor/rules 目录,目录是刚刚创建的 vue3-rules.mdc 文件 在这里插入图片描述 在这里插入图片描述

手动创建

在项目根目录创建一个 .cursor/rules 目录(注意是两级目录)或者使用命令行创建

mkdir -p .cursor/rules
复制代码

在 .cursor/rules 目录下新建 typescript-rules.mdc 文件,内容如下:

---description: TypeScript coding standardsglobs: **/*.ts,**/*.tsx
priority: 1
---

# TypeScript Coding Standards

## 基本规范

-   使用 `const` 而不是 `let` 来声明常量
-   使用 `const` 而不是 `let` 来声明变量
-   使用 2 个空格缩进
-   显式声明函数返回类型
-   使用单引号
-   使用箭头函数
-   使用解构赋值
-   避免使用 `any` 类型
复制代码

在这里插入图片描述

Project Rules 规则格式

mdc 规则

新规则文件采用 .mdc 格式,主要由两部分组成:

  • YAML 格式头部配置
    • name:项目规则名称
    • description:项目规则描述
    • priority:项目规则优先级,默认优先级为 0,数字越大优先级越高,相同优先级按文件名排序
    • globs:匹配规则
    • when:规则生效条件,满足条件的规则才会生效
  • Markdown 或者 XML 格式规则内容

glob 规则

常用的 glob 语法规则:

  • *:匹配任意文件名
  • **:匹配任意目录深度
  • !:排除匹配
  • {}:组合匹配

glob 的基本语法非常灵活可以任意组合,我们可以组合出更多满足日常需求的规则

# 多内容匹配\*_/_.{ts, tsx, js}

# 匹配所有 .ts 文件

\*_/_.ts# 排除测试文件!\*_/_.test.ts

# 排除构建目录

!**/dist/** !**/build/**

# 匹配特定目录

src/components/\*_/_.tsx 123456789101112
复制代码

规则继承复用

Project Rules 的规则继承、复用也很简单,就是在一个 .mdc 文件中通过 @file 引入其他规则作为上下文使用

在这里插入图片描述

条件规则

Project Rules 支持根据环境变量设置规则:

---name: develop-rulesdescription: Development environment ruleswhen: ${NODE_ENV} === 'development'---12345
复制代码

Project Rules 分类管理?

看到有小伙伴将 Project Rules 做了分类管理,如下:

.cursor/rules├─ common│  └─ base.mdc             // 通用规则├─ frontend│  ├─ vue3-rules.mdc       // 前端vue3规则│  └─ typescript-rules.mdc // 前端ts规则└─ styles   └─ less.mdc             // 样式less规则
复制代码

经本人测试该方式不会被系统识别会导致 Project Rules 失效,Cursor 该版本不建议做 Project Rules 分类管理。

在这里插入图片描述

官方 mdc

官网地址:https://cursor.directory/generatehttps://cursor.directory/generate

cursor.directory 提供了生成 Project Rules 的功能,只需按提示上传文件即可

React 规则

---name: react-rulesdescription: React project best practices and coding standardsglobs:    - 'src/**/*.tsx'
    - 'src/**/*.jsx'
    - 'src/**/*.ts'
priority: 2
---

# React 项目规范

## 组件规范

### 基础规则

-   使用函数组件 + Hooks 模式
-   组件文件使用 .tsx 扩展名
-   组件名使用 PascalCase 命名
-   文件名与组件名保持一致

### 目录结构

src/ ├── components/ # 通用组件 ├── pages/ # 页面组件 ├── hooks/ # 自定义 hooks ├── utils/ # 工具函数 ├── services/ # API 服务 ├── types/ # TypeScript 类型 └── styles/ # 样式文件

### Hooks 使用规范

-   自定义 Hook 以 `use` 开头
-   避免在循环/条件语句中使用 Hooks
-   合理使用 useMemo 和 useCallback
-   使用 useContext 管理全局状态

### 性能优化

-   合理拆分组件
-   使用 React.memo 避免不必要渲染
-   使用 React.lazy 实现代码分割
-   图片使用 next/image 优化

### TypeScript 集成

-   为 Props 定义接口
-   使用 FC 类型声明组件
-   避免使用 any
-   合理使用泛型

## 状态管理

-   小型项目使用 Context + useReducer
-   大型项目推荐使用 Redux Toolkit
-   遵循不可变数据原则
-   合理划分 state 结构
复制代码

Vue 规则

---name: vue-rulesdescription: Vue.js project best practices and coding standardsglobs:    - 'src/**/*.vue'
    - 'src/**/*.ts'
priority: 2
---

# Vue 项目规范

## 组件规范

### 基础规则

-   使用 Composition API
-   组件名使用 PascalCase
-   Props 定义使用 defineProps
-   事件使用 defineEmits

### 目录结构

src/ ├── components/ # 通用组件 ├── views/ # 页面视图 ├── composables/ # 组合式函数 ├── utils/ # 工具函数 ├── api/ # API 接口 ├── types/ # TypeScript 类型 └── assets/ # 静态资源

### 组合式函数规范

-   以 `use` 开头命名
-   一个函数只做一件事
-   返回响应式数据
-   注意依赖收集

### 性能优化

-   合理使用 computed
-   v-show vs v-if
-   使用 defineAsyncComponent
-   keep-alive 缓存

### TypeScript 集成

-   使用 defineComponent
-   Props 类型声明
-   组件实例类型
-   响应式类型

## 状态管理

-   小型项目使用 provide/inject
-   大型项目使用 Pinia
-   模块化状态管理
-   合理使用 storeToRefs
复制代码

Styles 规则

---name: style-rulesdescription: CSS/LESS/SCSS styling best practicesglobs:    - 'src/**/*.css'
    - 'src/**/*.less'
    - 'src/**/*.scss'
    - 'src/**/*.module.*'
priority: 1
---

# 样式规范

## 命名规范

### BEM 命名

-   Block: 独立实体
-   Element: 使用双下划线 \_\_
-   Modifier: 使用双横线 -- .block {} .block\_\_element {} .block--modifier {}

### CSS Modules

-   文件名使用 .module.css
-   类名使用小驼峰
-   避免全局样式
-   合理使用组合

## 目录结构

styles/ ├── global/ # 全局样式 ├── themes/ # 主题文件 ├── variables/ # 变量定义 ├── mixins/ # 混入 └── components/ # 组件样式

## 响应式设计

-   使用相对单位
-   移动优先原则
-   合理使用媒体查询
-   避免固定宽度

### 断点设置

@screen-xs: 480px; @screen-sm: 576px; @screen-md: 768px; @screen-lg: 992px; @screen-xl: 1200px;

## 性能优化

-   避免深层嵌套
-   合理使用选择器
-   压缩和合并
-   CSS 代码分割

## 主题定制

-   使用 CSS 变量
-   设计 Token 系统
-   暗黑模式支持
-   主题切换方案

## 最佳实践

-   避免 !important
-   模块化样式
-   注释规范
-   代码复用
复制代码

二、迁移实战 - 从 0 到 1 的升级指南 🛠️

2.1 创建规则目录

首先需要在项目根目录创建规则文件夹:

# 创建规则目录mkdir -p .cursor/rules# 可选:将旧规则文件移动到新目录mv .cursorrules .cursor/rules/general.mdc
复制代码

2.2 规则文件结构

新的规则文件采用 .mdc 格式,由两部分组成:

  1. YAML 头部配置
  2. Markdown 规则内容

一个完整的规则文件示例:

---name: typescript-rulesdescription: TypeScript coding standards and best practicesglobs:    - 'src/**/*.ts'
    - 'src/**/*.tsx'
    - '!src/**/*.test.ts'
priority: 1
---

# TypeScript Coding Standards

## 基础规范

-   使用 2 空格缩进
-   优先使用 const 声明变量
-   显式声明函数返回类型

## 最佳实践

-   避免 any 类型
-   合理使用泛型
-   接口优于类型别名

## 参考文档

Read more from @common-rules.mdc
复制代码

2.3 规则分类示例

推荐按照以下方式组织规则文件:

.cursor/rules/├── common/│   ├── general.mdc     # 通用规则│   └── git.mdc         # Git 规范├── frontend/│   ├── javascript.mdc  # JS 规则│   ├── typescript.mdc  # TS 规则│   └── react.mdc       # React 规则├── backend/│   ├── node.mdc       # Node.js 规则│   └── database.mdc   # 数据库规则└── style/    ├── css.mdc        # CSS 规则    └── less.mdc       # LESS 规则
复制代码

2.4 Glob 模式详解

新系统支持强大的 glob 匹配模式:

globs:    # 匹配所有 .ts 文件    - '**/*.ts'    # 排除测试文件    - '!**/*.test.ts'    # 排除构建目录    - '!**/dist/**'    - '!**/build/**'    # 匹配特定目录    - 'src/components/**/*.tsx'
复制代码

常用的 glob 语法:

  • *: 匹配任意文件名
  • **: 匹配任意目录深度
  • !: 排除匹配
  • {}: 组合匹配

三、进阶技巧 - 玩转规则系统 🎯

3.1 规则继承与复用

使用 @file 语法引用其他规则:

# React 组件规范继承通用前端规范 @frontend/common.mdc## 特殊规则-   使用函数组件-   采用 Hooks 开发
复制代码

3.2 个人规则配置

创建个人专属规则:

# 创建个人规则目录mkdir -p .cursor/rules/personal# 添加到 .gitignoreecho ".cursor/rules/personal/" >> .gitignore
复制代码

3.3 规则优先级

通过 priority 字段控制规则优先级:

---name: override-rulesdescription: Override default rulespriority: 100 # 高优先级规则---
复制代码

优先级说明:

  • 数字越大优先级越高
  • 默认优先级为 0
  • 相同优先级按文件名排序

3.4 条件规则

支持根据环境变量设置规则:

---name: dev-rulesdescription: Development environment ruleswhen: ${NODE_ENV} === 'development'---
复制代码

3.5 规则模板

创建规则模板便于复用:

---name: rule-templatedescription: Template for new rules
---# ${name} 规范## 基础规则${rules}## 最佳实践${practices}
复制代码

四、实战案例 - 规则系统应用场景 💡

4.1 多人协作项目

适合大型团队的规则结构:

.cursor/rules/├── team/              # 团队通用规则├── projects/          # 项目特定规则└── members/           # 成员个性化规则
复制代码

4.2 Monorepo 项目

针对 monorepo 的规则配置:

---name: package-rulesdescription: Rules for specific packageglobs: ['packages/*/src/**/*.ts']---
复制代码

4.3 微前端项目

为不同子应用设置规则:

.cursor/rules/├── main/             # 主应用规则└── sub-apps/         # 子应用规则    ├── app1.mdc    └── app2.mdc
复制代码

五、注意事项 ⚠️

  1. 迁移时间

    • .cursorrules 将在未来版本废弃
    • 建议尽快完成迁移工作
    • 保留旧规则作为备份
  2. 规则冲突

    • 注意 glob 匹配范围
    • 合理设置优先级
    • 避免循环引用
  3. 性能考虑

    • 规则文件不宜过大
    • 避免过于复杂的 glob 模式
    • 适当使用规则缓存
  4. 团队协作

    • 统一规则命名规范
    • 做好规则文档
    • 及时同步规则变更

六、最佳实践配置示例 📚

6.1 React 项目配置示例

---name: react-rulesdescription: React project best practices and coding standardsglobs:    - 'src/**/*.tsx'
    - 'src/**/*.jsx'
    - 'src/**/*.ts'
priority: 2
---

# React 项目规范

## 组件规范

### 基础规则

-   使用函数组件 + Hooks 模式
-   组件文件使用 .tsx 扩展名
-   组件名使用 PascalCase 命名
-   文件名与组件名保持一致

### 目录结构

src/ ├── components/ # 通用组件 ├── pages/ # 页面组件 ├── hooks/ # 自定义 hooks ├── utils/ # 工具函数 ├── services/ # API 服务 ├── types/ # TypeScript 类型 └── styles/ # 样式文件

### Hooks 使用规范

-   自定义 Hook 以 `use` 开头
-   避免在循环/条件语句中使用 Hooks
-   合理使用 useMemo 和 useCallback
-   使用 useContext 管理全局状态

### 性能优化

-   合理拆分组件
-   使用 React.memo 避免不必要渲染
-   使用 React.lazy 实现代码分割
-   图片使用 next/image 优化

### TypeScript 集成

-   为 Props 定义接口
-   使用 FC 类型声明组件
-   避免使用 any
-   合理使用泛型

## 状态管理

-   小型项目使用 Context + useReducer
-   大型项目推荐使用 Redux Toolkit
-   遵循不可变数据原则
-   合理划分 state 结构
复制代码

6.2 Vue 项目配置示例

---name: vue-rulesdescription: Vue.js project best practices and coding standardsglobs:    - 'src/**/*.vue'
    - 'src/**/*.ts'
priority: 2
---

# Vue 项目规范

## 组件规范

### 基础规则

-   使用 Composition API
-   组件名使用 PascalCase
-   Props 定义使用 defineProps
-   事件使用 defineEmits

### 目录结构

src/ ├── components/ # 通用组件 ├── views/ # 页面视图 ├── composables/ # 组合式函数 ├── utils/ # 工具函数 ├── api/ # API 接口 ├── types/ # TypeScript 类型 └── assets/ # 静态资源

### 组合式函数规范

-   以 `use` 开头命名
-   一个函数只做一件事
-   返回响应式数据
-   注意依赖收集

### 性能优化

-   合理使用 computed
-   v-show vs v-if
-   使用 defineAsyncComponent
-   keep-alive 缓存

### TypeScript 集成

-   使用 defineComponent
-   Props 类型声明
-   组件实例类型
-   响应式类型

## 状态管理

-   小型项目使用 provide/inject
-   大型项目使用 Pinia
-   模块化状态管理
-   合理使用 storeToRefs
复制代码

6.3 样式文件配置示例

---name: style-rulesdescription: CSS/LESS/SCSS styling best practicesglobs:    - 'src/**/*.css'
    - 'src/**/*.less'
    - 'src/**/*.scss'
    - 'src/**/*.module.*'
priority: 1
---

# 样式规范

## 命名规范

### BEM 命名

-   Block: 独立实体
-   Element: 使用双下划线 \_\_
-   Modifier: 使用双横线 --

.block {} .block\_\_element {} .block--modifier {}

### CSS Modules

-   文件名使用 .module.css
-   类名使用小驼峰
-   避免全局样式
-   合理使用组合

## 目录结构

styles/ ├── global/ # 全局样式 ├── themes/ # 主题文件 ├── variables/ # 变量定义 ├── mixins/ # 混入 └── components/ # 组件样式

## 响应式设计

-   使用相对单位
-   移动优先原则
-   合理使用媒体查询
-   避免固定宽度

### 断点设置

@screen-xs: 480px; @screen-sm: 576px; @screen-md: 768px; @screen-lg: 992px; @screen-xl: 1200px;

## 性能优化

-   避免深层嵌套
-   合理使用选择器
-   压缩和合并
-   CSS 代码分割

## 主题定制

-   使用 CSS 变量
-   设计 Token 系统
-   暗黑模式支持
-   主题切换方案

## 最佳实践

-   避免 !important
-   模块化样式
-   注释规范
-   代码复用
复制代码
# JavaScript# CSS# UI/UX# 设计模式
返回片段