昨晚我盯着 Cursor 的 AI 助手生成了一堆「default export」组件,差点把键盘砸了。
我花了 3 分钟写了一个 .cursorrules 文件。第二天,同样的项目,AI 生成代码的正确率从 60% 飙升到 90%——不用改一行 Prompt。
这不是什么高级技巧。但凡认真研究过 awesome-cursorrules 这个 GitHub 项目(3.9 万 Star)的人都知道:这玩意儿被严重低估了。
为什么你写的 .cursorrules 没效果?
你大概是这样写的:
# .cursorrules
使用 TypeScript
用 React
组件要有类型定义
然后抱怨 AI 完全不听。
问题在于:你写的是描述,不是指令。 AI 读「要有类型定义」和读「interface ButtonProps { label: string; onClick: () => void; }」是完全不同的理解深度。
技巧一:给出具体代码示例,比描述管用 100 倍
来自 awesome-cursorrules 社区最受欢迎的规则格式——决策树 + 示例代码:
# .cursorrules
## React 组件规范
生成组件时:
1. 必须用命名导出(禁止 default export)
2. Props 接口必须写在组件上方
3. 事件处理用 useCallback 包装(除非在 deps 数组中直接使用)
4. 样式用 Tailwind,不用 inline style
## 正确示例
typescript
// ✅ 正确:命名导出 + 完整类型 + useCallback
interface CardProps {
title: string;
onClose: () => void;
}
export const Card: React.FC = ({ title, onClose }) => {
const handleClose = useCallback(() => {
onClose();
}, [onClose]);
return (
{title}
关闭
);
};
// ❌ 错误:default export、无类型、使用普通函数
export default ({ title, close }) => (
)
有了这个示例,AI 每次生成 React 组件时都会「照着抄」,正确率立竿见影。
## 技巧二:多语言 Monorepo 项目如何让 AI 自动切换上下文
很多团队用 monorepo 管理工作台(Next.js)、后端服务(Python FastAPI)、基础设施(Go)。
在项目根目录放一个 `.cursorrules`,分别定义各语言的编码规范:
markdown
.cursorrules(monorepo 根目录)
语言专属规则
- 前端 TypeScript (apps/web/):严格模式、禁止 any、必须有返回类型
- Python 服务 (services/*/app/):必须有类型提示、用 pytest、统一用 Black 格式化
- Go 基础设施 (infra/*/):错误必须用 %w 包装、必须传递 context
优先级规则
不同语言冲突时,语言专属规则优先。
绝对不要把前端规范套用到 Go 后端代码上。
这样 AI 在同一段对话里切换 TypeScript/Python/Go 时,会自动遵循各自的规则,不用你每次都重新提醒它。
## 技巧三:把 ESLint 规则「喂给」AI,从源头减少报错
这是 awesome-cursorrules 里最实用的技巧之一——**把代码规范写进 AI 生成流水线**:
markdown
代码质量门禁
- 禁止 console.log(统一用结构化日志器 logger)
- 禁止同步 fetch(必须用 async/await + try/catch)
- 禁止修改函数参数
- 所有外部 API 调用必须设置 timeout(默认 5000ms)
- 所有异步操作必须加错误边界
TypeScript 约束
- 不用 ! 非空断言(用显式 null 检查替代)
- 禁止 @ts-ignore(除非加注释说明原因)
- 不确定类型时优先用 unknown 而不是 any
这样做的好处是:**AI 第一次生成的代码就能通过 lint,不是一遍遍让它修 bug。**
## 技巧四:长对话的「上下文压缩协议」,防止 AI 失忆
对话一长,AI 开始「忘记」之前的约定。解决方案来自社区贡献的上下文管理规则:
markdown
上下文使用协议
当上下文使用超过 70% 时:
- 在文件顶部添加「变更日志」注释块,总结近期的改动
- 删除冗余注释和重复的类型定义
- 只保留当前函数及其直接依赖
- 在文件头部标注:// Context summary: ...
这个规则让 AI 在长对话里也能保持一致性,不会写着写着突然「失忆」。
## 技巧五:把团队潜规则编码进去,换人也不怕
比技术技巧更重要的:**`.cursorrules` 能让团队的「潜规则」永久化。**
markdown
我们团队的 Git 规范
- 分支命名:
类型/工单号-描述(如 feat/PROJ-123-用户登录) - Commit 格式:
类型(范围): 描述(Angular 风格) - PR 必须包含:做了什么、为什么做、怎么测试
- 合入 main 必须至少 1 人 review 通过
部署规范
- 新功能必须用 Feature Flag 灰度
- 数据库迁移:必须先向后兼容,再发版
- 任何迁移操作必须附回滚方案
不管谁接手项目,AI 都记得你的规范。新人 onboarding 时间直接减半。
## 数据说明一切
- [awesome-cursorrules](https://github.com/PatrickJS/awesome-cursorrules) GitHub:**39,194 Star**,3,336 Fork
- [Cursor 官方仓库](https://github.com/cursor/cursor):**32,679 Star**
- 近期热点:SpaceX 有权以 600 亿美元收购 Cursor 的消息([Reuters 报道](https://www.reuters.com/technology/spacex-says-it-has-option-acquire-startup-cursor-60-billion-2026-04-21/))引爆 Hacker News,162 票热评
- Reddit r/artificial 上关于 AI 代码编辑器的讨论量同比上涨 47%
## 5 分钟快速上手
bash
在项目根目录创建 .cursorrules
touch .cursorrules
写入第一条规则——你最受不了 AI 犯的错
cat > .cursorrules << 'EOF'
.cursorrules - 项目编码规范
格式
- 所有文件使用 Prettier 格式化
- 单行最大长度:100 字符
- 禁止 console.log,统一使用 logger
TypeScript
- 禁止 any,必须显式标注类型
- 所有函数必须有返回类型 EOF
就这么简单。配置一次,受益无穷——每个新的 AI 对话窗口都会自动读取这个文件。
---
**你有什么独家的 .cursorrules 规则?评论区见,我来整理成社区最佳实践合集。**
**数据来源:**
- [awesome-cursorrules GitHub](https://github.com/PatrickJS/awesome-cursorrules)(39K Star)
- [Cursor GitHub](https://github.com/cursor/cursor)(32K Star)
- [Reddit r/artificial: Cursor 热门讨论](https://www.reddit.com/r/artificial/)
- [Reddit r/programming: TypeScript 7.0 Beta 发布](https://www.reddit.com/r/programming/comments/1srwby3/announcing_typescript_70_beta/)
- [Hacker News: SpaceX/Cursor 600亿美元收购案](https://news.ycombinator.com/)
Top comments (0)