【Cursor】Cursor中的Project Rules是什么?

Cursor版本

当前Cursor版本:0.45.14

Project Rules简介

Project Rules 是 Cursor 0.45 版本新增的功能,和 .cursorrules 一样是项目特定的规则,有助于人工智能理解并遵循项目的约定。

为什么要有Project Rules

在思考这个问题前,我们可以先回想一下 .cursorrules 存在的问题,有哪些痛点是 .cursorrules 解决不了的:

  • 单文件限制:实际项目中规则通常写在一起,当规则多时 .cursorrules 文件会变得异常庞大、难以维护
  • 规则冲突:我们可以设置全局Rules for AI,项目中我们可以设置项目Rules,两者极易发生冲突且覆盖规则不可控,会导致很多意想不到的结果
  • 功能单一:实际开发过程中,项目通常采用前后端分离,一个项目中不可能只有一种语言,.cursorrules 文件很难处理多种语言规则
  • 不适用团队开发:在团队中共同维护一套规则是比较困难的,大量规则写到一起,维护成本较高且容易引起规冲突

再来看一下Project Rules的功能:

  • 多文件管理:可以创建多个规则文件,分类管理
  • glob 匹配模式:使用glob模式匹配指定文件或者目录使用的规则
  • 规则继承:支持规则文件之间的引用作为上下文
  • 自动加载:当匹配到文件自动加载规则,规则变更后自动更新生效
  • 版本控制:精细灵活的规则模式方便团队协作

其次Cursor官方宣布将来会废弃 .cursorrules,主推Project Rules,提前学习一下以备不时之需。

迁移.cursorrules

从老项目迁移 .cursorrules 也很简单,只需将 .cursorrules 文件名修改为 文件名.mdc,然后移动到 .cursor/rules 目录下即可

shell 复制代码
$ mv .cursorrules .cursor/rules/pre-rules.mdc

新建Project Rules

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

可视化方式

进入Cursor设置页面,点击【General】找到【Project Rules]

点击【Add new rule】,输入规则文件名称

创建完成就可以看到在项目根目录多了一个 .cursor/rules 目录,目录是刚刚创建的 vue3-rules.mdc 文件

手动创建

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

shell 复制代码
$ mkdir -p .cursor/rules

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

yaml 复制代码
---
description: TypeScript coding standards
globs: **/*.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的基本语法非常灵活可以任意组合,我们可以组合出更多满足日常需求的规则

bash 复制代码
# 多内容匹配
**/*.{ts, tsx, js} 
# 匹配所有 .ts 文件
**/*.ts
# 排除测试文件
!**/*.test.ts
# 排除构建目录
!**/dist/**
!**/build/**
 
# 匹配特定目录
src/components/**/*.tsx

规则继承复用

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

条件规则

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

yaml 复制代码
---
name: develop-rules
description: Development environment rules
when: ${NODE_ENV} === 'development'
---

Project Rules分类管理?

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

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

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

使用Project Rules

在Chat中使用

通常Project Rules是不用手动调用的,当Project Rules不生效时,可以考虑在Chat中Project Rules可以作为上下文引入使用

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | |

在Composer中使用

同样当Project Rules不生效时,可以考虑在Chat中Project Rules可以作为上下文引入使用

官方mdc

官网地址:cursor.directory/generate

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

最佳实践案例

以下几个规则案例来自:article.juejin.cn/post/747104...

React规则

yaml 复制代码
---
name: react-rules
description: React project best practices and coding standards
globs:
    - '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规则

yaml 复制代码
---
name: vue-rules
description: Vue.js project best practices and coding standards
globs:
  - "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规则

less 复制代码
---
name: style-rules
description: CSS/LESS/SCSS styling best practices
globs:
    - '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
-   模块化样式
-   注释规范
-   代码复用

参考

article.juejin.cn/post/747104...

友情提示

见原文:【Cursor】Cursor中的Project Rules是什么?

本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。

相关推荐
极客密码9 小时前
充了20刀 Cursor Pro 的朋友看到我的方案沉默了...
aigc·ai编程·cursor
Mintopia2 天前
想摸鱼背单词?我用 Cursor 一个小时开发了一个 Electron 应用
前端·javascript·cursor
勤劳打代码4 天前
事半功倍 —— 403 Forbidden 最佳解决
openai·ai编程·cursor
清沫6 天前
规训 AI Agent 实践
前端·ai编程·cursor
coder_pig6 天前
【独家实测】Cursor 2.0 发布,花一分钟看看都更新了啥
aigc·ai编程·cursor
程序员鱼皮7 天前
刚刚 Cursor2.0炸裂发布!这3大亮点必学
程序员·ai编程·cursor
飞哥数智坊7 天前
看完 Cursor 2.0,我感觉国产 AI 编程又有希望了
人工智能·ai编程·cursor
yaocheng的ai分身7 天前
Composer:使用强化学习构建快速前沿模型
cursor
yaocheng的ai分身8 天前
Cursor 2.0 更新:新的编码模型和 Agent 界面
cursor
楚莫识10 天前
Comet AI 浏览器免费开放了,还送 Perplexity Pro 会员!
openai·ai编程·cursor