<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>代码规范 on Kalend's Blog</title><link>https://blog.kalend.top/tags/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83/</link><description>Recent content in 代码规范 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 13 Aug 2026 08:30:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83/index.xml" rel="self" type="application/rss+xml"/><item><title>Cursor Rules深度玩法：用.cursorrules驯服AI写出你想要的代码</title><link>https://blog.kalend.top/2026/08/13/2026-08-13-cursor-rules-guide.html/</link><pubDate>Thu, 13 Aug 2026 08:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/08/13/2026-08-13-cursor-rules-guide.html/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;你花钱订阅了Cursor，结果AI生成的代码风格混乱、不守规范、每次都要重新解释项目结构——问题不在AI，在你没写Rules。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="先说结论"&gt;先说结论
&lt;/h2&gt;&lt;p&gt;Cursor Rules 是控制AI行为的规则系统。没有它，AI像个每次轮岗的实习生——你得反复解释项目规范。有了它，AI变成了资深同事，开口就知道该用什么风格、遵守什么架构、避开什么坑。&lt;/p&gt;
&lt;h2 id="为什么你需要-cursor-rules"&gt;为什么你需要 Cursor Rules
&lt;/h2&gt;&lt;p&gt;大多数人用 Cursor 的方式，只发挥了30%的潜力。&lt;/p&gt;
&lt;p&gt;你在Chat里说&amp;quot;帮我写个登录接口&amp;quot;，AI给你一段代码。你说&amp;quot;不对，我们项目用Kotlin不是Java&amp;quot;，它道歉然后重写。你说&amp;quot;数据库操作要走Repository层&amp;quot;，它又道歉。每次对话都在重复同样的纠正。&lt;/p&gt;
&lt;p&gt;这就是没有 Rules 的代价——&lt;strong&gt;你的项目规范全靠口头传达，AI的上下文窗口一关就全忘了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;有人会说&amp;quot;我有AGENTS.md啊&amp;quot;。没错，AGENTS.md定义的是跨工具的通用原则（&amp;ldquo;写清晰的代码&amp;quot;&amp;ldquo;遵循SOLID&amp;rdquo;）。但Cursor Rules控制的是Cursor专属行为——用什么语言、什么框架、什么命名规范、哪些文件不能碰。两者是互补关系，不冲突。&lt;/p&gt;
&lt;h2 id="规则系统演变从单文件到目录"&gt;规则系统演变：从单文件到目录
&lt;/h2&gt;&lt;p&gt;Cursor的规则系统经历过一次大升级：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;版本&lt;/th&gt;
					&lt;th&gt;方式&lt;/th&gt;
					&lt;th&gt;状态&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;旧版&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;项目根目录 &lt;code&gt;.cursorrules&lt;/code&gt; 单文件&lt;/td&gt;
					&lt;td&gt;已 deprecated&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;新版&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;.cursor/rules/&lt;/code&gt; 目录 + &lt;code&gt;.mdc&lt;/code&gt; 文件&lt;/td&gt;
					&lt;td&gt;2026年推荐&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;旧版的问题是所有规则挤在一个文件里，没法按场景分类。新版用目录结构，每个 &lt;code&gt;.mdc&lt;/code&gt; 文件是一条独立规则，可以精确控制触发条件。&lt;/p&gt;
&lt;p&gt;迁移很简单：把旧 &lt;code&gt;.cursorrules&lt;/code&gt; 的内容移入 &lt;code&gt;.cursor/rules/global.mdc&lt;/code&gt;，加上frontmatter就行。&lt;/p&gt;
&lt;h2 id="mdc-文件格式详解"&gt;MDC 文件格式详解
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;.mdc&lt;/code&gt; 文件是Markdown + YAML frontmatter的组合：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: 规则说明（AI靠这个判断是否需要加载）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;globs: **/*.tsx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 规则标题
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;规则内容，用Markdown格式书写。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;三个frontmatter字段决定了规则的行为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;description&lt;/strong&gt;：给AI看的&amp;quot;说明书&amp;rdquo;。Agent Requested类型靠它判断是否加载&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;globs&lt;/strong&gt;：文件匹配模式。Auto Attached类型靠它触发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;alwaysApply&lt;/strong&gt;：设为true就是Always类型，始终加载&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="四种规则类型核心"&gt;四种规则类型（核心）
&lt;/h2&gt;&lt;p&gt;这是整个系统最关键的部分。四种类型对应四种触发方式，用对了事半功倍，用错了形同虚设。&lt;/p&gt;
&lt;h3 id="always全局常驻"&gt;Always：全局常驻
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;alwaysApply: true&lt;/code&gt;，每次对话都加载。&lt;/p&gt;
&lt;p&gt;适合放什么？全局代码风格、语言偏好、项目架构概览。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: 全局代码规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: true
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 代码规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 使用TypeScript，禁止any
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 组件用PascalCase，工具函数用camelCase
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 注释用英文
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：Always规则会占用AI的上下文窗口。放太多Always规则，AI留给实际代码的空间就少了。全局规则控制在3-5条以内。&lt;/p&gt;
&lt;h3 id="auto-attached文件触发"&gt;Auto Attached：文件触发
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;globs&lt;/code&gt; 匹配时自动加载。你编辑 &lt;code&gt;.tsx&lt;/code&gt; 文件，React相关的规则自动生效。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: React组件开发规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;globs: **/*.tsx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# React规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 组件用函数式，不用class
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Props用interface定义，不用type
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 样式用Tailwind，不用CSS Modules
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;最适合按文件类型区分规则的场景：TypeScript有TypeScript的规范，Python有Python的规范，互不干扰。&lt;/p&gt;
&lt;h3 id="agent-requestedai自判断"&gt;Agent Requested：AI自判断
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;alwaysApply: false&lt;/code&gt; 且没有 &lt;code&gt;globs&lt;/code&gt;，AI根据description判断是否需要加载。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: 数据库迁移和ORM操作规范。当涉及数据库schema变更、
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; migration文件编写、Prisma/TypeORM操作时使用。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;globs:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 数据库规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 迁移文件必须可回滚
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 禁止直接修改生产环境schema
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 字段命名用snake_case
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这类规则的关键在description写得好不好。太笼统（&amp;ldquo;数据库相关规则&amp;rdquo;）AI可能不加载；太具体（列了一堆关键词）反而有效。&lt;/p&gt;
&lt;h3 id="manual手动触发"&gt;Manual：手动触发
&lt;/h3&gt;&lt;p&gt;用户在Chat中 &lt;code&gt;@规则名&lt;/code&gt; 手动激活。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: 发布流程检查清单。部署到生产环境前手动激活。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 发布检查
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] 所有测试通过
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] CHANGELOG已更新
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] 环境变量已配置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] 数据库迁移已测试
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;适合低频但重要的场景：发布流程、数据迁移、紧急修复。&lt;/p&gt;
&lt;h2 id="实用规则模板直接复制使用"&gt;实用规则模板（直接复制使用）
&lt;/h2&gt;&lt;h3 id="代码风格规则"&gt;代码风格规则
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: 项目代码风格统一规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: true
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 代码风格
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 缩进：2空格（前端），4空格（Python）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 字符串：单引号（JS/TS），双引号（Python）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 分号：不加分号（JS/TS）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 命名：组件PascalCase，变量camelCase，常量UPPER_SNAKE_CASE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 函数不超过30行，超过就拆
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 每个函数必须有JSDoc/docstring
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="安全规则"&gt;安全规则
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: 安全编码规范，防止常见漏洞
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: true
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 安全规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 禁止硬编码密钥、密码、Token，用环境变量
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- SQL查询必须用参数化，禁止字符串拼接
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 用户输入必须校验和转义
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- API接口必须有认证中间件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 敏感数据（密码、Token）禁止出现在日志中
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="测试规则"&gt;测试规则
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: 测试编写规范。涉及单元测试、集成测试时使用。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 测试规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 测试文件和源文件同目录，命名 xxx.test.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 用 describe/it 结构，描述行为而非实现
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- mock外部依赖，不mock被测函数
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 每个测试只验证一个行为
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 测试覆盖率不低于80%
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="git-规则"&gt;Git 规则
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: Git提交规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alwaysApply: true
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Git规范
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- commit message用英文，格式：type(scope): description
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- type: feat/fix/refactor/docs/test/chore
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- scope: 模块名（auth/api/ui/db）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 每个commit只做一件事
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 禁止提交 .env、node_modules、dist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="创建规则的三种方式"&gt;创建规则的三种方式
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;方式一：直接建文件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;.cursor/rules/&lt;/code&gt; 目录下创建 &lt;code&gt;.mdc&lt;/code&gt; 文件，写好frontmatter和内容。最直接，适合已有明确想法的情况。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方式二：Chat命令&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在Cursor Chat中输入 &lt;code&gt;/rules&lt;/code&gt;，会打开规则编辑器。适合快速创建单条规则。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方式三：AI生成&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在Chat中输入 &lt;code&gt;/Generate Cursor Rules&lt;/code&gt;，AI会分析你的项目结构和现有代码，自动生成一套规则。适合项目初期快速起步。&lt;/p&gt;
&lt;p&gt;我的建议：先用方式三生成初始规则，再用方式一逐条精调。AI生成的规则通常80%可用，但剩下20%需要你根据项目实际情况修正。&lt;/p&gt;
&lt;h2 id="踩坑经验"&gt;踩坑经验
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;坑1：规则太多导致AI混乱&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我见过有人写了20多条Always规则。结果AI的上下文窗口被规则塞满，留给实际代码的空间都不够了。AI开始&amp;quot;选择性失忆&amp;quot;，有时遵守规则有时不遵守，表现极不稳定。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：Always规则不超过5条。其余用Auto Attached或Agent Requested按需加载。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑2：规则互相冲突&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一条规则说&amp;quot;用class组件&amp;quot;，另一条说&amp;quot;用函数式组件&amp;quot;。AI遇到这种情况会随机选一个，或者两头讨好写出四不像。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：定期检查规则之间有没有矛盾。按文件类型拆分规则，减少交叉。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑3：glob匹配不生效&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;写了个 &lt;code&gt;globs: *.ts&lt;/code&gt;，结果TypeScript文件没有触发规则。原因是glob需要完整的路径匹配模式，&lt;code&gt;*.ts&lt;/code&gt; 不匹配 &lt;code&gt;src/utils/helper.ts&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：用 &lt;code&gt;**/*.ts&lt;/code&gt; 匹配所有子目录下的TypeScript文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑4：description写得太模糊&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agent Requested类型完全依赖description来判断是否加载。如果你写&amp;quot;代码规范&amp;quot;，AI大概率不会加载——太笼统了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：在description中明确列出触发场景。比如&amp;quot;API接口设计规范。当编写REST API路由、中间件、请求/响应处理时使用。&amp;quot;&lt;/p&gt;
&lt;h2 id="与-agentsmd-的关系"&gt;与 AGENTS.md 的关系
&lt;/h2&gt;&lt;p&gt;两者不是替代关系，而是互补：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;AGENTS.md&lt;/th&gt;
					&lt;th&gt;.cursor/rules&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;作用域&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;跨工具通用&lt;/td&gt;
					&lt;td&gt;Cursor专属&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;内容&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;通用原则、架构决策&lt;/td&gt;
					&lt;td&gt;具体编码规范、框架规则&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;触发&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;始终加载&lt;/td&gt;
					&lt;td&gt;四种类型可选&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;维护&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;项目级别&lt;/td&gt;
					&lt;td&gt;按场景分文件&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;实际项目中的组合方式：AGENTS.md放&amp;quot;我们要做什么&amp;quot;（产品方向、架构原则、技术选型），.cursor/rules放&amp;quot;具体怎么做&amp;quot;（代码风格、框架规范、文件结构）。&lt;/p&gt;
&lt;p&gt;两者写得好，AI的表现会从&amp;quot;实习生&amp;quot;进化到&amp;quot;资深同事&amp;quot;——它不只是能写代码，而是能写&lt;strong&gt;你的项目&lt;/strong&gt;风格的代码。&lt;/p&gt;</description></item></channel></rss>