← 返回博客
·AI工具

你的 .cursorrules 可能正在悄悄搞砸你的项目

Cursor 的 .cursorrules 文件是个好东西,但大多数团队用错了。这篇文章说说真实遇到的问题和实际解法。

#Cursor#AI编程#开发效率

# 你的 .cursorrules 可能正在悄悄搞砸你的项目

Cursor 的 .cursorrules 文件是个好东西,但大多数团队用错了。

我见过太多项目里堆了几百行 .cursorrules,开发者以为自己在建立规范,实际上在给自己挖坑。这篇文章说说真实遇到的问题。

问题一:规则写得太泛,越多越乱

最常见的错误是把 .cursorrules 当成"给AI看的最佳实践文档",塞进去各种"应该遵循 SOLID 原则"、"代码要有注释"、"禁止使用 any"。

{

"rules": [

"遵循SOLID原则",

"所有函数必须有JSDoc注释",

"禁止使用any类型",

"使用async/await而不是.then",

"错误处理要到位"

]

}

看起来很美好,实际上AI根本不知道在什么场景下该用哪条。当一个文件同时涉及类型约束、错误处理、代码风格时,这些泛泛的规则会互相冲突,让模型陷入两难。

更实际的做法是**按场景写规则,而不是按原则写规则**:

{

"rules": [

{

"match": "src/api/**/*.ts",

"rules": [

"API函数统一返回 Result<T> 类型,不允许直接抛错",

"所有请求必须带 X-Request-ID header"

]

},

{

"match": "src/components/**/*.tsx",

"rules": [

"组件必须用 React FC + children prop 模式",

"禁止在组件内直接调接口,数据由父组件通过 props 注入"

]

}

]

}

这种写法让规则有了上下文,模型知道"哦,这是API层的文件,应该用这套约束"。

问题二:规则和实际代码风格打架

这是最让人崩溃的场景。.cursorrules 里写着"使用 PascalCase 命名组件",但实际代码库里全是 kebab-case 的组件名。AI每次生成代码都要在两套标准之间做选择,最终结果就是混用。

解决方法是:**在写 .cursorrules 之前,先用 grep -r "component" src/ 看看现有代码的真实风格**,然后去适配它,而不是让它适配你。

这不是妥协,是工程现实。你不能让历史代码去迁就AI写的新代码。

问题三:规则没有版本管理,被改乱了都不知道

.cursorrules 文件经常出现在 .gitignore 里,因为开发者觉得这是本地偏好。结果团队里每个人的规则都不一样,有人禁了 any,有人禁了 for...of,项目的一致性彻底崩了。

我的建议是:**.cursorrules 必须进 Git**。如果是 monorepo,放在根目录的 .cursorrules 应该对所有子项目生效,或者在根目录只写通用规则,在各子项目里写针对性的补充规则。

# .gitignore 错误示例

.cursorrules # 别忽略这个

# 正确做法

# .cursorrules 允许被提交

问题四:规则没有测试,不知道有没有用

这是最关键的一点——大多数团队的 .cursorrules 写完之后就再也不看了,直到某天AI突然开始生成奇怪的代码,才发现规则早就失效了。

我建议每两周做一次"规则健康检查":

  • 随机抽5个最近生成的代码文件
  • 2. 检查是否符合 .cursorrules 中的规则

    3. 如果有违规,说明规则写得不够清晰或者模型已经忽略了这条

    **规则的质量不在于数量,而在于可验证性。** 一条能精准描述行为且容易被验证的规则,远好过十条模糊的原则。

    实践建议

    回到原点:.cursorrules 是个工具,不是万能药方。用的时候想清楚这四个问题:

  • **这条规则解决的是什么具体问题?** 不要写"提高代码质量"这种废话。
  • 2. **它和现有代码风格一致吗?** 先审计再写。

    3. **违反规则时我能发现吗?** 如果规则没有可观测的边界,就等于没有规则。

    4. **团队里每个人都在用同一套规则吗?** 规则不一致比没有规则更糟糕。

    别把 .cursorrules 当成给AI的培训手册,当成**给AI的任务说明书**——越具体、越可执行越好。

    你遇到过 .cursorrules 搞出来的奇怪问题吗?评论区聊聊。