← 返回博客
·AI工具

Cursor Rules 搞定后,我的代码质量终于不靠玄学了

分享如何用 Cursor Rules 让 AI 助手真正遵循项目规范,解决代码风格精神分裂问题

#Cursor#AI编程#代码规范

# Cursor Rules 搞定后,我的代码质量终于不靠玄学了

上周 Code Review,同事问我:"你这项目结构怎么这么规整,每个文件的注释风格都一样?" 我笑了笑,说这是 Cursor Rules 的功劳。他一脸茫然,大概是觉得我在说某种玄学。

其实三个月前,我的代码风格可以用"精神分裂"来形容——今天用 camelCase,明天变成 snake_case;这个文件有详细注释,下个文件全是魔法数字。AI 助手帮倒忙的情况更是数不胜数,明明我在写 Node.js,它非要给我建议 Django 的目录结构。

直到我认真配了一套 .cursorrules

先说说这玩意儿是什么

Cursor Rules 本质上是一个项目级的"人设文件"。你告诉 AI 这个项目的技术栈、代码规范、业务背景,它就会在这个框架下给你干活。听起来很简单,但效果出乎意料的好。

配置文件放在项目根目录,叫 .cursorrules。格式随意,但我推荐用 Markdown,可读性更好。

# 项目背景

这是一个跨境电商的订单管理系统,面向东南亚市场。

技术栈

  • Node.js 18 + TypeScript
  • NestJS 框架
  • PostgreSQL 主库,Redis 做缓存
  • 部署在 AWS ECS
  • 代码规范

  • 所有 API 返回格式统一用 { code, data, message }
  • 错误处理用全局异常过滤器,不要在每个 controller 里 try-catch
  • 数据库字段用 snake_case,TypeScript 代码用 camelCase
  • 注释用中文,变量名用英文
  • 业务重点

  • 多币种处理是核心逻辑,所有金额相关操作必须考虑汇率
  • 订单状态机是:pending -> paid -> shipped -> delivered,没有 canceled(业务要求)
  • 时区全部用 UTC,展示层再转当地时间
  • 这个文件会自动被 Cursor 加载,AI 在这个项目里的所有回答都会遵循这些约定。

    我踩过的坑

    坑一:Rules 太抽象,AI 理解不了

    一开始我写的 Rules 很"程序员风格":

  • 遵循 SOLID 原则
  • 代码要高内聚低耦合
  • 注意性能优化
  • 结果 AI 给的建议依然不靠谱。原因很简单:这些话太抽象了,没有具体的指导意义。

    后来我改成具体的指令:

  • 每个 service 类只负责一个业务领域
  • 数据库查询禁止在循环里执行
  • 缓存 key 格式:业务模块:实体ID:字段名
  • 效果立竿见影。AI 开始给出符合预期的代码建议,而不是正确的废话。

    坑二:忘记更新 Rules

    项目迭代几个月后,技术栈有调整——我们从 AWS SQS 换成了 RabbitMQ。但我忘了更新 .cursorrules,结果 AI 一直在建议用 SQS 的代码模式。

    解决方法是把这个文件纳入 Code Review 流程。技术栈有变化,先更新 Rules,再写代码。

    坑三:Rules 和 ESLint/Prettier 打架

    这是个真实案例。我的 .cursorrules 里写着"每个函数必须有 JSDoc 注释",但 ESLint 配置里没这个规则。结果 AI 生成的代码有注释,但同事提交的代码没有,Code Review 时经常为此争论。

    最后我把 ESLint 配置和 Cursor Rules 同步了——Rules 里写的规范,ESLint 里必须能检查。AI 和人类用同一套标准,才不会精神分裂。

    进阶用法:分层 Rules

    项目大了之后,单一的 .cursorrules 可能不够用。比如我们的前端和后端在同一个仓库,但规范完全不同。

    做法是创建多级 Rules:

    项目根目录/.cursorrules # 通用规则(Git 规范、文档风格)

    backend/.cursorrules # 后端专用(NestJS、PostgreSQL)

    frontend/.cursorrules # 前端专用(React、Tailwind)

    Cursor 会自动合并这些规则,层级越深优先级越高。

    一个真实案例

    上个月我们重构订单状态机。旧代码是一个 500 行的 switch-case,改一个状态要改七八个地方。我用 Cursor Rules 告诉 AI:

    # 订单状态机重构

    当前状态机代码在 src/order/status.machine.ts,需要拆分成状态模式。

    目标:

  • 每个状态一个类,实现 OrderState 接口
  • 2. 状态转换逻辑集中在一个配置对象里

    3. 保留现有的所有测试用例

    约束:

  • 状态类文件放在 src/order/states/ 目录
  • 每个状态类必须有单元测试
  • 使用依赖注入,不要硬编码状态实例
  • 然后打开 Cursor 的 Composer,选中旧代码,让它重构。生成的代码结构清晰,测试也通过了。真正花时间的不是写代码,而是把需求翻译成 AI 能理解的指令。

    值不值得搞?

    如果你是一个人写代码,收益有限——你自己的规范你自己清楚。但如果是团队协作,尤其是团队里有新人,Cursor Rules 可以大幅降低沟通成本。

    我现在入职新同事,第一件事就是让他读项目的 .cursorrules。十五分钟了解项目规范,比看一百行代码注释效率高多了。

    当然,Rules 不是万能的。AI 有时候还是会犯蠢,尤其是遇到边界情况。但至少,它不会再给我建议用错误的变量命名风格了。

    这就够了。