当前位置: 首页 > news >正文

【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%以上

临时指令
持久化规则
项目规范需求
选择控制方式
基本Prompt
Rules规则
单次交互有效
需重复输入
容易遗漏细节
持续生效
自动应用
全面覆盖
结果不一致
输出稳定统一

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
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. 规则调试技巧

如果规则没有生效,可以:

  1. 检查文件路径和格式是否正确
  2. 确认globs模式是否匹配目标文件
  3. 查看alwaysApply设置是否符合预期
  4. 在Cursor中使用@规则名手动触发测试
代码风格
业务逻辑
安全问题
识别代码问题
选择规则类型
风格规范规则
项目逻辑规则
安全约束规则
编写.mdc文件
测试规则效果
是否达标?
纳入版本控制
团队共享生效
http://www.dtcms.com/a/600590.html

相关文章:

  • WebServer05
  • 【数据分析-Excel】常用函数汇总
  • 深入理解MySQL事务隔离级别与锁机制(从ACID到MVCC的全面解析)
  • RabbitMQ应用(1)
  • .NET驾驭Excel之力:Excel应用程序的创建与管理
  • Unity2.5D视角肉鸽项目架构
  • JAVA和C#的语法对比
  • WPS Excel 图表
  • 电商网站开发需要掌握哪些知识技能品牌设计和vi设计有什么区别
  • Spring 框架整合 JUnit 单元测试——包含完整执行流程
  • .NET驾驭Excel之力:自动化数据处理 - 开篇概述与环境准备
  • 多站点网站群的建设与管理识图搜索在线 照片识别
  • C++ builder xe 用imageen组件ImageEnView1合并多个图片导出一个pdf
  • 深度拆解汽车制造系统设计:用 Java + 设计模式打造高扩展性品牌 - 车型动态生成架构
  • 客户端VS前端VS后端
  • 西安企业网站建设哪家好hs网站推广
  • 【宝塔面板】监控、日志、任务与安全设置
  • RPA财务机器人落地指南:治理架构、流程优化与风险防控
  • GitHub Agent HQ正式发布,构建开放智能体生态
  • XML节点SelectSingleNode(“msbuild:DebugType“ 为什么要加msbuild
  • 【GitHub热门项目】(2025-11-12)
  • 【RAG评测方案汇总】GitHub开源工具全览
  • 数据集月度精选 | 高质量具身智能数据集:打开机器人“感知-决策-动作”闭环的钥匙
  • 深圳网站制作易捷网络湘乡网站seo
  • Java Maven Log4j 项目日志打印
  • 面试:Spring中单例模式用的是哪种?
  • 长芯微LPS5820完全P2P替代NCP51820,LPS5820 是一款高速半桥驱动器,可用来驱动半 桥功率拓扑的 GaN 功率管。
  • Python 第三方库:PyTorch(动态计算图的深度学习框架)
  • 如果网站打开非常缓慢国内全屋定制十大名牌
  • 【操作系统】详解 分页与分段系统存储管理