【cursor】进阶技巧Rules
文章目录
- 基础
- 什么是Rules
- Rules的三大核心价值
- 1. 统一团队代码风格,降低协作成本
- 2. 精准控制AI行为,避免“自由发挥”
- 3. 项目知识传承,打造“不朽”的技术文档
- Rules实战
- Rules的四种生效方式
- 效果对比:有Rules vs 无Rules的天壤之别
- 实战
- 创建Rules文件
- 创建Rules目录结构
- Rules文件基本结构
- 案例一:统一代码风格规则
- 问题场景
- 规则编写
- 效果对比:有Rules vs 无Rules
- 案例二:项目特定逻辑规则
- 问题场景
- 规则编写
- API调用规范
- 效果对比
- 案例三:安全与规范约束
- 问题场景
- 规则编写
- 正确示例(应该这样写)
- 数据验证规范
- 效果对比
- Rules管理技巧
- 1. 规则优化技巧
- 2. 团队协作管理
- 3. 规则调试技巧
基础
当你招聘新员工时,肯定不会只说“你做开发工作吧”,而是会给他一本详细的员工手册——公司文化、工作流程、代码规范、沟通方式等一应俱全。AI编程助手同样如此,而Cursor的Rules功能,就是为你AI助手量身定制的“入职手册”。
什么是Rules
想象一下,新员工段码第一天上班,你希望他如何快速融入团队?你会告诉他:“我们团队用TypeScript不是AnyScript,组件库用Ant Design,API调用要走统一的拦截器…”这些就是Rules的雏形。
Rules的本质是机器可读的项目说明书,它能够将你的项目规范、技术偏好、架构模式等信息结构化地传递给AI,确保每次代码生成都符合预期。
与传统Prompt相比,Rules具有持续性和上下文感知能力。普通Prompt像是每次都要重新交代的临时指令,而Rules则是刻在AIDNA里的行为准则。研究表明,使用Rules后,AI生成代码与项目规范的一致性从不足40%提升至85%以上。
Rules的三大核心价值
1. 统一团队代码风格,降低协作成本
当团队中每个成员都使用自己习惯的提示词时,项目会迅速沦为“代码缝合怪”。Rules作为统一的AI行为准则,确保无论团队中有多少人使用AI编程,生成的代码都像是出自一人之手。
某前端团队在引入Rules前后对比发现,新成员段萌儿接入项目的平均时间从3天缩短到1天,代码审查反馈次数减少60%,因为AI已经自动规避了大多数风格问题。
2. 精准控制AI行为,避免“自由发挥”
没有约束的AI就像没有导航仪的司机——虽然也能到达目的地,但可能会绕远路、走错道。Rules通过明确的边界设定,告诉AI什么是必须做的、什么是可以做的、什么是禁止做的。
例如,在金融类项目中,你可以通过Rules明确禁止AI使用任何不安全的加密算法;在React项目中,要求必须使用函数组件而非类组件。这种精确控制极大减少了人工修正成本。
3. 项目知识传承,打造“不朽”的技术文档
传统文档最大的问题是与代码实际脱节,而Rules作为机器可读的规范,会随着项目迭代而更新,成为最准确的技术传承载体。
当团队人员流动时,新成员无需从头阅读大量文档,只需查看Rules文件就能快速掌握项目核心技术约束。某大型项目在引入Rules后,新人上手效率提升200%,因为AI已经成为了最了解项目规范的“活文档”。
Rules实战
Rules的四种生效方式
在实际项目中,不同的规则可能有不同的适用范围。Cursor提供了灵活的规则生效机制:
| 规则类型 | 适用场景 | 配置示例 |
|---|---|---|
| 始终生效 | 全局编码规范、安全规则 | alwaysApply: true |
| 文件匹配 | 技术栈特定规则 | globs: "*.vue" |
| 手动调用 | 特定任务的临时规则 | 在对话中使用#规则名 |
| Agent请求 | 复杂任务的动态规则 | Agent根据上下文自动判断 |

如果是手动调用的话 则需要每次输入命令的时候先@Rules选择对应的.mdc规则

效果对比:有Rules vs 无Rules的天壤之别
在实际项目中,Rules带来的改进是显而易见的。以开发一个登录页面为例:
无Rules时,AI可能使用错误的技术栈(如用原生HTML代替组件库),忽略项目的国际化要求,生成与现有代码风格迥异的代码,导致需要大量手动调整。
有Rules后,AI会严格遵循项目技术栈,自动添加国际化支持,保持代码风格一致性,生成的代码几乎可以直接运行。
实战
创建Rules文件
在开始编写具体规则前,我们需要先建立Rules的基础架构。Cursor Rules文件使用特殊的MDC格式(Markdown with Metadata),这种格式既包含元数据定义,也支持自然的Markdown内容。
创建Rules目录结构
可以使用 /Generate Cursor Rules

最后生成的效果如下

或者使用
/Generate Cursor Rules 描述你的需求
/Generate Cursor Rules 帮我生成一个全局的rules, 内容是关于mybatis-plus的使用规范
/Generate Cursor Rules 帮我生成一个rules, 内容是要求每次cursor生成代码后,同时生成单元测试案例
也可以手动在你的项目根目录下,创建如下结构:
项目根目录/
├── .cursor/ # Cursor配置目录
│ └── rules/ # Rules规则目录
│ ├── coding-style.mdc # 代码风格规则
│ ├── security-rules.mdc # 安全规范规则
│ └── project-specific.mdc # 项目特定规则
Rules文件基本结构
每个Rules文件都遵循相同的结构模板:
---
description: "规则描述"
globs: "文件匹配模式" # 如: "*.js,*.ts,*.jsx,*.tsx"
alwaysApply: true/false # 是否始终应用
---# 规则标题
具体的规则内容说明...
关键参数说明:
- description:规则的简要描述,帮助团队成员理解规则用途
- globs:使用通配符模式指定规则生效的文件范围,如
*.vue仅对Vue文件生效 - alwaysApply:设置为
true时,规则在所有相关交互中自动生效


案例一:统一代码风格规则
问题场景
团队中新成员段萌儿使用AI生成React组件时,出现了代码风格不一致的问题:有时用双引号,有时用单引号;缩进有2空格有4空格;注释格式五花八门。这导致代码审查时需要大量时间调整格式。
规则编写
创建 .cursor/rules/coding-style.mdc:
---
description: "前端项目代码风格规范"
globs: "*.js,*.jsx,*.ts,*.tsx,.vue"
alwaysApply: true
---# 前端代码风格规范## 基本格式要求
- **引号**:一律使用单引号('),JSX属性使用双引号(")
- **缩进**:使用2个空格,禁止使用Tab制表符
- **行宽**:每行不超过100字符,超长需换行
- **分号**:语句末尾必须添加分号## React/Vue特定规范
- 组件命名使用PascalCase(大驼峰):如`UserProfileCard`
- 变量命名使用camelCase(小驼峰):如`userName`
- 常量命名使用UPPER_SNAKE_CASE:如`API_BASE_URL`## 注释规范
- 函数注释使用JSDoc格式
- 复杂逻辑必须添加行内注释
- TODO注释需标明负责人和日期:`// TODO: [段码] 2025-11-04 优化性能`## 导入导出规范
- 导入语句按以下顺序分组:内置模块 → 外部依赖 → 相对路径
- 使用具名导入而非默认导入:`import { useState } from 'react'`
效果对比:有Rules vs 无Rules
无Rules时AI生成的代码:
import React from "react";function userCard({name, age}) {return (<div className='user-card'><p>姓名: {name}</p> <p>年龄: {age}</p></div>)
}export default userCard;
有Rules后AI生成的代码:
import React from 'react';interface UserProps {name: string;age: number;
}/*** 用户信息卡片组件* @param {UserProps} props - 组件属性* @returns {JSX.Element} 用户卡片元素*/
function UserCard({ name, age }: UserProps): JSX.Element {return (<div className="user-card"><p>姓名: {name}</p><p>年龄: {age}</p></div>);
}export default UserCard;
案例二:项目特定逻辑规则
问题场景
电商项目中,用户登录后需要执行一系列关联操作:记录日志、更新统计、发送通知等。不同开发者实现的逻辑位置不统一,导致经常遗漏关键步骤。
规则编写
创建 .cursor/rules/project-logic.mdc:
---
description: "电商项目业务逻辑规范"
globs: "*.js,*.ts"
alwaysApply: false # 按需手动应用
---# 业务逻辑规范## 用户认证相关
### 登录后必须执行的操作
用户登录成功后,必须按顺序调用以下函数:
1. `logUserActivity('login')` - 记录用户活动
2. `updateUserStatistics(userId)` - 更新用户统计
3. `checkUnreadNotifications(userId)` - 检查未读通知### 示例代码模板
```javascript
// 用户登录处理
async function handleUserLogin(userData) {try {// 认证逻辑...const authResult = await authenticateUser(userData);// ✅ 必须按照以下顺序调用await logUserActivity('login', authResult.userId);await updateUserStatistics(authResult.userId);await checkUnreadNotifications(authResult.userId);return authResult;} catch (error) {await logError('login_failed', error);throw error;}
}
API调用规范
- 所有API请求必须使用统一的
apiClient实例 - 错误处理必须包含错误日志记录
- 异步操作必须使用async/await,避免回调地狱
效果对比
无Rules时AI可能生成的代码:
// 可能遗漏关键步骤
async function loginUser(credentials) {const response = await fetch('/api/login', {method: 'POST',body: JSON.stringify(credentials)});return response.json();
}
有Rules后AI生成的代码:
import { apiClient } from '../utils/api';
import { logUserActivity, updateUserStatistics, checkUnreadNotifications } from '../services/userService';/*** 用户登录处理* @param {LoginCredentials} credentials - 登录凭据* @returns {Promise<User>} 用户信息*/
async function loginUser(credentials: LoginCredentials): Promise<User> {try {const user = await apiClient.post('/auth/login', credentials);// 登录后必须执行的操作序列await logUserActivity('login', user.id);await updateUserStatistics(user.id);await checkUnreadNotifications(user.id);return user;} catch (error) {console.error('登录失败:', error);throw new Error('登录处理失败');}
}
案例三:安全与规范约束
问题场景
项目中发现多处硬编码的API密钥和密码,安全漏洞扫描显示高风险。需要建立强制性的安全规范。
规则编写
创建 .cursor/rules/security-rules.mdc:
---
description: "安全开发规范"
globs: "**" # 所有文件
alwaysApply: true # 安全规则必须始终生效
---# 安全开发规范## 🔐 密钥管理(严格执行)
- **绝对禁止**在代码中硬编码任何密钥、密码、API Token
- 必须使用环境变量或安全的配置管理服务
- 敏感信息必须从代码库中完全移除### 错误示例(禁止出现)
```javascript
// ❌ 严禁这样写!
const API_KEY = 'sk_live_abc123xyz789';
const DB_PASSWORD = 'password123';function connectDB() {return mongoose.connect('mongodb://user:pass@localhost/db');
}
正确示例(应该这样写)
// ✅ 正确的做法
const API_KEY = process.env.STRIPE_API_KEY;
const DB_PASSWORD = process.env.DB_PASSWORD;function connectDB() {const connectionString = `mongodb://${process.env.DB_USER}:${process.env.DB_PASS}@localhost/db`;return mongoose.connect(connectionString);
}
数据验证规范
- 所有用户输入必须进行验证和清理
- 数据库查询必须使用参数化查询,防止SQL注入
- 文件上传必须验证类型和大小
效果对比
无Rules时AI可能生成的不安全代码:
// AI可能不知道项目安全要求
const stripe = require('stripe')('sk_live_abc123xyz789');function saveUser(input) {// 可能存在SQL注入风险const query = `INSERT INTO users VALUES ('${input.name}')`;return db.execute(query);
}
有Rules后AI生成的安全代码:
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);/*** 安全保存用户信息* @param {UserInput} input - 用户输入(已验证)*/
async function saveUser(input: UserInput): Promise<void> {// 使用参数化查询防止SQL注入const query = 'INSERT INTO users (name) VALUES (?)';await db.execute(query, [input.name]);
}
Rules管理技巧
1. 规则优化技巧
根据实战经验,以下是让Rules更高效的关键技巧:
- 精简内容:合并重复的技术栈描述,删除冗余信息
- 精确控制范围:不要所有规则都设为
alwaysApply,按需使用globs匹配 - 避免模糊要求:规则应具体可行,删除像"提高性能"等模糊表述
2. 团队协作管理
将.cursor/rules目录纳入Git版本控制,确保团队所有成员使用相同的规则配置。这样可以保证代码风格和质量的统一性,方便追踪规则的变更历史。
3. 规则调试技巧
如果规则没有生效,可以:
- 检查文件路径和格式是否正确
- 确认
globs模式是否匹配目标文件 - 查看
alwaysApply设置是否符合预期 - 在Cursor中使用
@规则名手动触发测试
