Cursor Rules 实战:.cursorrules 与 .cursorignore 怎么写(含模板)

HTMLPAGE 团队
14 分钟阅读

不是概念解释,而是可落地模板:从单仓到 monorepo 的 .cursorrules/.cursorignore 配置方案,包含分层规则、风险边界、评审清单和常见故障恢复流程。

#Cursor #开发效率 #隐私 #索引 #提示词

很多人用 Cursor 用到一段时间会遇到同一个问题:

  • 小改动越改越大,最后不敢点“Apply”
  • 代码风格和团队规范对不上(命名、目录、错误处理、测试策略)
  • 项目越大越慢,@codebase 像“看不见”你的仓库
  • 公司代码不敢随便索引,担心把敏感文件卷进去

解决思路不是写更长提示词,而是把“口头约束”固化成 规则文件

这篇文章讲三件事:

  1. .cursorignore:哪些文件/目录不要参与索引与上下文
  2. .cursorrules:Cursor 在这个项目里应该怎么做事(边界、风格、输出格式)
  3. 如何按“单仓/monorepo/团队协作”三种场景落地

三个文件分别解决什么问题

文件你用它来做什么典型效果
.cursorignore排除不该索引/不该喂给 AI 的内容变快、跑偏减少、敏感目录更安全
.cursorrules固定团队规范与边界(“怎么改、改到哪、怎么交付”)输出更一致、改动更可控
.gitignoreGit 不追踪哪些文件与 AI 无关,但常和上面两者同时存在

注意:具体规则细节会随 Cursor 版本迭代而变化。本文给的是可落地的通用写法,你可以按团队实际再裁剪。


落地顺序:先 ignore,后 rules,最后再优化

推荐顺序:

  1. 先写 .cursorignore,把噪音和敏感数据排掉
  2. 再写 .cursorrules,把输出边界和交付格式固定
  3. 用 1 周数据复盘,再迭代规则(不要一口气写很长)

.cursorignore 模板(建议从“保守”开始)

目标:把依赖、构建产物、缓存、日志、密钥等排除掉。

你可以先直接复制,然后再按你的仓库删减:

# 依赖与包管理
node_modules/
.pnpm-store/

# 构建产物 / 缓存
.nuxt/
.output/
dist/
build/
.next/
coverage/

# 工具缓存
.vscode/
.idea/
.DS_Store
*.log

# 环境变量与密钥
.env
.env.*
*.pem
*.key
*.p12

# 大文件与数据(按需)
*.zip
*.tar
*.gz
*.7z
*.mp4
*.mov
*.pdf

常见踩坑

  • 把整个仓库都索引了:很慢,而且“相关文件建议”会更乱
  • 把生成目录也索引了:AI 会参考生成代码,导致改动方向偏
  • 忘了排除 .env:就算不直接输出,参与上下文也不放心

monorepo 额外建议

如果你是多包仓库,建议把“非当前包”的大目录先排除,再按需放开。这样可以减少跨包误改和索引负担。


.cursorrules 模板(把“边界”写清楚)

.cursorrules 的目标不是写一堆口号,而是让 Cursor 每次改动都更可控。

推荐结构:

  1. 项目概述(让它别乱引框架)
  2. 目录与边界(改哪里、不改哪里)
  3. 代码风格(命名、类型、错误处理)
  4. 输出格式(先计划、后补丁、附验证步骤)

核心原则:规则要“可执行、可检查、可争议”

  • 可执行:出现明确动作(例如“先输出文件清单”)
  • 可检查:review 时能判断有没有遵守
  • 可争议:团队成员可对规则本身提 PR 调整

下面给一份偏通用的模板(你可以把技术栈替换成自己的):

# .cursorrules

## 项目概述
- 这是一个基于 Nuxt/Vue + TypeScript 的前端项目。
- 优先复用现有工具与组件,不要引入新框架/新工程方案。

## 目录边界(非常重要)
- 只允许修改:src/、app/、components/、composables/、server/(按项目实际调整)
- 禁止修改:scripts/、infra/、CI 配置、锁文件(除非我明确要求)
- 禁止跨目录重构:不要为了“更优雅”移动文件

## 代码规范
- 不使用 any(除非我明确允许)
- 遇到不确定的类型先提问,不要猜
- 保持现有 API 不变,除非我明确要求调整
- 错误处理必须明确:不要吞错误

## 输出要求
- 先输出:将修改的文件清单 + 每个文件的修改点 + 验证步骤
- 我确认后再生成代码/补丁
- 改动尽量小步,避免一次改太多文件

## 验证
- 如有脚本:优先给出可执行的验证命令(lint/typecheck/build)
- 如是 UI:给出最小手动验证路径

monorepo 专用模板(可直接改名使用)

如果你的仓库按 packages/* / apps/* 管理,推荐再加一条“作用域约束”:

# .cursorrules (monorepo)

## Scope First
- 每次任务必须先确认目标包,例如 packages/landing。
- 未明确范围时,先提问再改动。
- 禁止跨包重构,除非需求明确要求。

## Change Budget
- 单轮最多修改 2-4 个文件。
- 超过预算时先输出计划,等待确认。

## Safe Commands
- 不执行会产生全局副作用的命令(端口清理、全仓格式化、批量删除)
- 高风险命令必须二次确认。

## Delivery Format
- 输出包含:改动文件、改动理由、验证步骤、回滚方案。

这类模板最适合团队协作,能明显减少“改到别的子项目”的事故。

什么时候应该继续加规则?

一个简单判断:

  • 你已经在同一个项目里纠正过它三次(比如“不要动这个目录”“不要新增依赖”“先给计划”),那就写进 .cursorrules

让规则真的生效的写法

  • 规则不要太长:越长越容易被忽略,先保留“边界 + 输出格式”两块
  • 用“禁止/允许”写清楚:别写“尽量”“最好”这种模糊词
  • 每次迭代只改一小段:观察 2~3 次改动效果再继续加

推荐评审清单(给团队)

  • 是否先给了文件清单和改动计划
  • 是否出现了越界修改(目录/依赖/配置)
  • 是否提供了验证步骤
  • 是否具备回滚路径

常见问题(FAQ)

我写了 .cursorignore,为什么还是很慢?

通常是忽略范围还不够“狠”,或者仓库里仍然有大量大文件/生成文件被索引。可以先从构建产物、依赖、缓存目录排起。

我写了 .cursorrules,它还是会越改越大怎么办?

先把“输出格式”钉死:强制它先给改动计划,不确认不生成补丁;然后在规则里明确“禁止跨目录重构/禁止新增依赖/每次最多改 N 个文件”。

团队里怎么落地更好?

.cursorignore / .cursorrules 当成项目的一部分(跟随仓库版本管理),并在 code review 里把“是否遵守规则”当成检查项。

规则越来越长,效果反而变差怎么办?

做一次“瘦身”:只保留 8~12 条高频硬规则(边界、输出格式、安全命令),其余移到团队文档,不要全塞进 rules。

规则更新频率建议多久一次?

建议按迭代节奏(如每 1~2 周)统一更新一次。临时问题先在 PR 描述里补约束,稳定后再写进规则。


故障恢复流程(非常实用)

当你发现“规则没生效/改动失控”时,按这个顺序处理:

  1. 立即停止继续生成,先冻结当前改动范围
  2. 回到上一轮可运行状态(分支/提交/暂存)
  3. .cursorrules 增加一条针对本次事故的硬约束
  4. 用同一需求复跑一次,验证约束是否真的起效

这一步做完,规则才算“闭环”。


延伸阅读