37 · 综合实战项目
用 Cursor 从零构建一个完整的全栈应用,走通规划、开发、调试、部署全流程。
写在前面
经过前面 36 篇文章的学习,你已经掌握了 Cursor 的核心能力:Plan Mode 做架构设计、Agent 自主编码、Tab 补全提速、Debug 模式修复问题,以及如何将 Git 嵌入日常工作流。但单独学每个功能是一回事,把它们串联起来完成一个真实项目是另一回事。
本篇文章是一个 综合实战项目(Capstone Project),目标是用 Cursor 从零构建一个完整的全栈 Web 应用。我们将走完从项目规划到部署上线的每一个环节,让你亲身体验 Cursor 在真实开发流程中的全部价值。
为了让你有最直接的参考,我们选择构建一个 个人知识管理平台(NoteFlow)——一个支持 Markdown 笔记、标签分类、全文搜索、用户认证的 Web 应用。前端使用 React + TypeScript,后端使用 Node.js + Express + SQLite,部署到 Vercel + Railway。
如果你已经看过 Claude Code 的 capstone(todo-cli),你会发现本篇的思路类似,但 Cursor 的可视化 IDE 特性让每个环节都更直观。
01 · 项目概览与目标
1.1 我们要构建什么
NoteFlow 是一个轻量级的个人知识管理工具,核心功能包括:
| 功能模块 | 描述 | 优先级 |
|---|---|---|
| 用户注册与登录 | JWT 认证,Session 管理 | P0 |
| Markdown 笔记编辑 | 支持实时预览、语法高亮 | P0 |
| 标签系统 | 创建、关联、过滤标签 | P1 |
| 全文搜索 | 基于标题和内容的模糊搜索 | P1 |
| 笔记归档 | 软删除 + 回收站 | P2 |
| 暗色模式 | 主题切换 | P2 |
1.2 技术栈选型
前端(React + Vite)
├── React 18 + TypeScript
├── React Router v6 —— 路由管理
├── Tailwind CSS —— 样式框架
├── React Markdown —— Markdown 渲染
├── Zustand —— 轻量状态管理
└── Vitest —— 单元测试
后端(Node.js)
├── Express + TypeScript
├── Prisma —— ORM / 数据库迁移
├── SQLite —— 本地数据库(开发)
├── JWT —— 身份认证
├── Zod —— 请求校验
└── Supertest —— API 测试1.3 Cursor 工具链映射
在整个项目中,Cursor 的每个核心能力都会在最合适的阶段登场:
| 阶段 | 使用模式 | 典型场景 |
|---|---|---|
| 项目规划 | Plan Mode | 架构设计、数据库建模、API 路由规划 |
| 功能开发 | Agent | 实现完整的注册、登录、笔记 CRUD |
| 日常编码 | Tab 补全 | 组件 props、类型标注、重复性模板代码 |
| 问题修复 | Debug 模式 | 调试 401 认证失败、CORS 配置错误 |
| 版本管理 | Git 集成 | 提交规范、分支管理、Code Review |
| 上线部署 | Agent + Terminal | 构建脚本、环境变量、部署配置 |
1.4 为什么选这个项目
个人知识管理是一个”足够复杂又足够熟悉”的领域:
- 足够复杂:涉及用户认证、CRUD、搜索、状态管理,能覆盖全栈开发的典型挑战
- 足够熟悉:笔记应用大家每天都在用,需求清晰,不需要额外解释业务逻辑
- 结果可感知:做完以后是一个真正能用的产品,而不是一个 meaningless 的 demo
这种”做出来自己能用”的项目,是学习效率最高的——你会有动力去打磨它。
02 · 项目规划:使用 Plan Mode
2.1 初始化 Plan Mode
在 Cursor 中,按下 Cmd + Shift + I(Mac)或 Ctrl + Shift + I(Windows/Linux)进入 Plan Mode。此时你的输入框会变成蓝色,表示当前处于”计划模式”。
在 Plan Mode 下,Cursor 只讨论方案、不出代码。这是架构阶段最关键的习惯——先想清楚再动手。
2.2 数据库建模
我们的 Plan Mode 对话:
用户:我需要设计 NoteFlow 的数据库模型。用户有注册登录功能,
每篇笔记属于一个用户,可以有多个标签。标签也可以被多个笔记共享。
帮我设计 Prisma schema。
Plan Mode:分析需求,给出 schema 设计这是 Plan Mode 给出的 Prisma schema:
model User {
id String @id @default(cuid())
email String @unique
name String
password String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
notes Note[]
tags Tag[]
}
model Note {
id String @id @default(cuid())
title String
content String
archived Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
authorId String
author User @relation(fields: [authorId], references: [id])
tags NoteTag[]
}
model Tag {
id String @id @default(cuid())
name String
color String @default("#6366f1")
userId String
user User @relation(fields: [userId], references: [id])
notes NoteTag[]
@@unique([name, userId])
}
model NoteTag {
noteId String
note Note @relation(fields: [noteId], references: [id])
tagId String
tag Tag @relation(fields: [tagId], references: [id])
@@id([noteId, tagId])
}2.3 API 路由规划
在 Plan Mode 中继续讨论 API 设计:
需求清单:
- POST /api/auth/register —— 注册
- POST /api/auth/login —— 登录
- GET /api/notes —— 获取笔记列表(支持搜索、标签过滤、分页)
- POST /api/notes —— 创建笔记
- GET /api/notes/:id —— 获取单篇笔记
- PUT /api/notes/:id —— 更新笔记
- DELETE /api/notes/:id —— 软删除(归档)
- GET /api/tags —— 获取用户的所有标签
- POST /api/tags —— 创建标签2.4 前端路由设计
/ → 首页 / 登录跳转
/login → 登录页
/register → 注册页
/dashboard → 笔记列表(主页面)
/notes/new → 新建笔记
/notes/:id → 编辑笔记
/tags → 标签管理2.5 Plan Mode 的最佳实践
| 做法 | 推荐 | 不推荐 |
|---|---|---|
| 粒度 | 一次讨论一个模块 | 一次塞进所有需求 |
| 输出 | 产出文档 / schema / 路由表 | 产出可运行的代码 |
| 迭代 | 先认可方案,再逐步细化 | 一次追求完美方案 |
| 确认 | 让 Plan 给出多方案对比 | 接受第一个方案直接实施 |
关键模型:慢规划、快编码。规划阶段花 20% 的时间可以避免开发阶段 80% 的返工。
03 · 架构设计:从 Plan 到可执行蓝图
3.1 项目结构
在 Plan Mode 确认方案后,我们切换到 Agent 来生成初始项目结构。但在此之前,先用 Plan Mode 定好目录结构:
noteflow/
├── server/ # 后端
│ ├── prisma/
│ │ └── schema.prisma # 数据模型
│ ├── src/
│ │ ├── routes/ # 路由
│ │ ├── middleware/ # 中间件(auth, validation)
│ │ ├── lib/ # 工具函数
│ │ └── index.ts # 入口
│ ├── package.json
│ └── tsconfig.json
├── client/ # 前端
│ ├── src/
│ │ ├── components/ # 通用组件
│ │ ├── pages/ # 页面
│ │ ├── stores/ # Zustand 状态
│ │ ├── lib/ # API 调用封装
│ │ └── App.tsx
│ ├── package.json
│ ├── vite.config.ts
│ └── tailwind.config.js
├── .github/
│ └── workflows/ # CI/CD
└── README.md3.2 认证数据流(Token 时序图)
这是一个重要的心智模型,我们在 Plan Mode 中画出来:
┌─────────┐ ┌──────────┐ ┌─────────┐
│ Client │ │ Server │ │ DB │
└────┬────┘ └────┬─────┘ └────┬────┘
│ POST /login │ │
│ {email, password} │ │
│───────────────────>│ │
│ │ SELECT user │
│ │─────────────────────>│
│ │ user data │
│ │<─────────────────────│
│ │ bcrypt.compare() │
│ │ sign JWT │
│ {token, user} │ │
│<───────────────────│ │
│ │ │
│ GET /notes │ │
│ Authorization: │ │
│ Bearer <token> │ │
│───────────────────>│ │
│ │ verify JWT │
│ │ attach req.user │
│ │ SELECT notes │
│ │─────────────────────>│
│ [{id, title...}] │ │
│<───────────────────│ │这个数据流模型帮助我们确认:token 在客户端存储(localStorage),每次请求带在 header 中,服务端用中间件统一验证。
3.3 状态管理策略
在 Plan Mode 中,我们也讨论了前端的全局状态管理策略:
| 状态类型 | 存储位置 | 示例 |
|---|---|---|
| 用户认证信息 | Zustand store | token, user profile |
| 笔记列表 | Zustand store + SWR 缓存 | notes[] |
| 当前编辑内容 | React local state | title, content |
| UI 状态(主题、侧栏) | Zustand store | theme, sidebarOpen |
| 表单临时数据 | React local state | login form |
这个决策模型很简单:全局共享的放 store,局部使用的放 state,服务端数据考虑缓存策略。
04 · Agent 驱动的功能开发
4.1 切换到 Agent 模式
方案确认后,我们切换到 Agent 模式(Cmd + I)。这是开发的主力模式——Agent 可以自主创建、修改、删除文件,比你逐行编码快得多。
4.2 第一节:搭建后端骨架
Agent prompt:帮我搭建 NoteFlow 后端项目骨架。
使用 Express + TypeScript + Prisma + SQLite。
初始化 npm,配置 tsconfig,安装所有依赖,创建 Prisma schema,
并实现以下 API:
- POST /api/auth/register
- POST /api/auth/login
- GET /api/notes(带搜索和标签过滤)
- POST /api/notes
- PUT /api/notes/:id
- DELETE /api/notes/:id(软删除)
- GET /api/tags
- POST /api/tags
需要 JWT 认证中间件,密码用 bcrypt 加密,请求用 Zod 校验。这是 Agent 的典型用法——把上下文交代清楚,然后让 Agent 执行。Agent 会:
- 运行
npm init和npm install安装依赖 - 创建
prisma/schema.prisma并执行prisma migrate - 生成
src/index.ts入口文件 - 创建
src/routes/auth.ts、src/routes/notes.ts、src/routes/tags.ts - 创建
src/middleware/auth.ts认证中间件 - 创建
src/lib/validation.tsZod schema
整个过程 Agent 会自动完成。你只需要在关键决策点(比如 “数据库类型选 SQLite 还是 PostgreSQL”)被问到时做出选择。
4.3 验证后端 API
Agent 完成后,我们打开终端启动服务器:
cd server
npx prisma migrate dev --name init
npm run dev然后用 curl 测试注册和登录:
# 注册
curl -X POST http://localhost:3001/api/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","name":"测试用户","password":"123456"}'
# 登录
curl -X POST http://localhost:3001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"123456"}'
# 用返回的 token 创建笔记
curl -X POST http://localhost:3001/api/notes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"title":"我的第一篇笔记","content":"# Hello World\n这是一篇测试笔记。","tags":["学习"]}'4.4 第二节:搭建前端项目
后端跑通后,我们用 Agent 创建前端:
Agent prompt:为 NoteFlow 创建 React + Vite + TypeScript 前端。
配置 Tailwind CSS,安装 React Router、Zustand、react-markdown。
创建以下页面组件(先用模拟数据占位):
- LoginPage —— 登录表单
- RegisterPage —— 注册表单
- DashboardPage —— 笔记列表
- NoteEditorPage —— Markdown 编辑器 + 预览
- TagsPage —— 标签管理
并在 App.tsx 中配置路由。Agent 会生成完整的页面骨架、路由配置,以及 src/lib/api.ts 这样的 API 调用封装。
4.5 Agent 开发的最佳实践
| 维度 | 最佳实践 |
|---|---|
| Prompt 粒度 | 按功能模块拆分,一次一个完整模块 |
| 上下文 | 在 prompt 中说明已有结构和约定 |
| 验证节奏 | 每完成一个模块就运行测试或手动验证 |
| 偏差纠正 | 如果 Agent 做出了你不想要的设计决策,及时指出并让 Agent 修正 |
| 增量构建 | 先搭骨架、再填充细节,而不是一次生成所有代码 |
关键模型:Agent 是你的结对编程搭档,不是外包。你仍然需要审阅它的输出、做关键决策、保持整体的架构一致性。
05 · Tab 补全:日常编码的加速器
5.1 什么是 Cursor Tab
当你写代码时,Cursor 会在灰色文本中显示预测的下一段代码。按 Tab 接受,按 Esc 忽略。这听起来简单,但在实际项目中每天可以节省数百次击键。
5.2 实际场景演示
场景一:编写 React 组件
// 你输入:
interface NoteCardProps {
note: Note;
onEdit: (id: string) => void;
onDelete: (id: string) => void;
}
// 输入完 interface 后开始写组件:
export function NoteCard({ note, onEdit, onDelete }: NoteCardProps) {
return (
// 在这里输入 <div 后,Cursor 会预测整个卡片结构
<div className="bg-white rounded-lg shadow p-4 hover:shadow-md transition-shadow">
<div className="flex justify-between items-start">
<h3 className="text-lg font-semibold text-gray-900">{note.title}</h3>
<div className="flex space-x-2">
<button onClick={() => onEdit(note.id)} className="...">编辑</button>
<button onClick={() => onDelete(note.id)} className="...">删除</button>
</div>
</div>
<p className="text-gray-600 mt-2 line-clamp-3">{note.content}</p>
<div className="flex gap-1 mt-3">
{note.tags.map(tag => (
<span key={tag.id} className="...">{tag.name}</span>
))}
</div>
</div>
);
}你实际只需要写 <div className="bg-white">,剩下的全是 Tab 补全。
场景二:写 API 路由
// 你已经写了 createNote 的 handler,现在写 updateNote:
export const updateNote: RequestHandler = async (req, res) => {
const { id } = req.params;
const { title, content, tags } = req.body;
// 输入 const note = await 后,Cursor 会预测:
const note = await prisma.note.update({
where: { id },
data: {
title,
content,
tags: {
set: [],
connectOrCreate: tags?.map(name => ({
where: { name_userId: { name, userId: req.user!.id } },
create: { name, userId: req.user!.id }
}))
}
},
include: { tags: { include: { tag: true } } }
});
res.json(note);
};5.3 Tab 补全的技巧
| 技巧 | 说明 |
|---|---|
| 写清晰的类型定义 | TypeScript 类型越精确,Tab 预测越准 |
| 先写函数签名 | 给出函数名 + 参数,Cursor 能推断实现 |
| 保持代码风格一致 | Tab 会学习你的风格,保持一致很重要 |
| 输入关键字符 | 输入 <div 触发 JSX 预测,输入 prisma. 触发 DB 操作 |
| 利用注释引导 | 写 // TODO: validate input 然后换行,Cursor 会帮你实现 |
5.4 数据驱动的对比
一个简单的实验:在 NoteFlow 项目中创建 5 个新的 API handler,分别用”手动打字”和”Tab 补全”两种方式:
| 指标 | 手动打字 | Tab 补全 | 提升 |
|---|---|---|---|
| 完成 5 个 handler | 约 18 分钟 | 约 6 分钟 | 3x |
| 击键次数 | 约 1200 次 | 约 300 次 | 4x |
| 手动纠错 | 3-5 次 | 0-1 次 | 显著减少 |
当然这些数字因人而异,但 Tab 补全带来的效率提升是实打实的。更重要的是,它减少了”上下文切换”——你不需要停下来想 API 的拼写或组件 props 的顺序,Cursor 帮你记住了。
关键模型:Tab 补全像是”代码的自动语音”——它在你开口之前已经知道你想说什么。你越熟悉项目,它的预测就越准。
06 · Debug 模式:问题定位与修复
6.1 真实 Bug 场景
在实际开发 NoteFlow 的过程中,几乎一定会遇到问题。这里我们用三个真实场景来演示 Cursor 的 Debug 模式。
6.2 场景一:401 认证失败
表现:前端登录成功后,带着 token 请求笔记列表,返回 401。
在 Cursor 的 Chat 中切换到 Debug 模式(Cmd + Shift + D),
粘贴错误信息:
POST /api/notes 401 (Unauthorized)
{"error":"未授权访问"}
提示:Debug 模式Debug 模式会自动分析:
- 检查 token 传递:前端
api.ts中Authorization: Bearer ${token}是否正确? - 检查 token 解析:后端
auth.ts中间件中jwt.verify(token, secret)是否用了正确的 secret? - 检查 token 格式:
Bearer前缀是否有空格?
结果发现:问题是前端存储 token 时用了 localStorage.setItem('token', data.token),但发请求时读的是 localStorage.getItem('auth_token'),key 不一致。修复后问题解决。
6.3 场景二:CORS 跨域错误
Access to fetch at 'http://localhost:3001/api/notes' from origin
'http://localhost:5173' has been blocked by CORS policy.把错误粘贴到 Debug 模式,Cursor 会给出修复方案:
- 安装
cors包 - 在 Express 入口配置
app.use(cors({ origin: 'http://localhost:5173', credentials: true })) - 如果用了自定义 header(如
Authorization),需要添加到allowedHeaders
6.4 场景三:Prisma 查询结果为空
表现:创建笔记时传了 tags 数组,但数据库里 NoteTag 关联没有创建。
Debug 提示:prisma.note.create 调用中 tags 的 connectOrCreate 逻辑有误。Debug 模式会逐层分析:
req.body.tags是string[](标签名数组)connectOrCreate需要where条件匹配name_userId复合唯一约束- 但代码中
create时没有包含userId
修复是将:
create: { name, userId: req.user!.id }添加到 connectOrCreate 的 create 字段。
6.5 Debug 模式的正确打开姿势
| 做法 | 推荐 | 不推荐 |
|---|---|---|
| 输入 | 粘贴完整的错误栈 + 相关代码 | 只说”它报错了” |
| 范围 | 指明哪个 API / 哪个页面 | 说”整个项目都有问题” |
| 预期 | 说明你期望的行为 | 只描述错误不描述预期 |
| 配合 | 在 Debug 模式下迭代追问 | 一句话后就不管了 |
关键模型:Debug 模式像是带着一个资深同事一起看报错——它能快速缩小范围,但最终的修复决策还是需要你来做。
07 · Git 工作流贯穿全程
7.1 初始化仓库
cd noteflow
git init
git add -A
git commit -m "chore: init project structure with backend + frontend"7.2 Cursor 的 Git 集成
Cursor 左侧的 Git 面板(Source Control 图标)让你可以:
- 查看变更:每个文件的改动用颜色标注(绿色 = 新增,红色 = 删除,蓝色 = 修改)
- 暂存文件:点击
+暂存,-取消暂存 - 写提交信息:Ctrl + Enter 提交
- 查看历史:点击文件查看历史版本
7.3 提交规范
我们采用 Conventional Commits 规范,在 NoteFlow 项目中实际用到的提交类型:
| 类型 | 用途 | 示例 |
|---|---|---|
| feat | 新功能 | feat: add note search API with title and content matching |
| fix | Bug 修复 | fix: fix CORS config for production origin |
| chore | 项目配置 | chore: setup Prisma with SQLite and initial migration |
| refactor | 重构 | refactor: extract auth middleware to separate file |
| docs | 文档 | docs: add API endpoints documentation |
| style | 代码格式 | style: format code with Prettier |
7.4 分支策略
main —— 生产分支
└─ develop —— 开发分支
├─ feat/auth —— 用户认证模块
├─ feat/notes —— 笔记管理模块
├─ feat/search —— 搜索功能
└─ fix/cors —— CORS 修复工作流程:
# 从 develop 切出功能分支
git checkout -b feat/auth develop
# 开发完成后合并回 develop
git checkout develop
git merge feat/auth
# 发布时合并到 main
git checkout main
git merge develop
git tag v0.1.07.5 AI 辅助的 Code Review
使用 Cursor Chat 来做 Code Review:
在 Chat 中输入:
"Review the diff of this branch.
Check for: security issues, error handling gaps,
TypeScript type safety, and SQL injection risks."Cursor 会逐文件审查变更,指出潜在问题。这让 Code Review 从”人工跑一遍”变成”自动扫描 + 人工复核”。
7.6 一个真实的提交序列
这是 NoteFlow 开发过程中的实际提交日志:
feat: implement JWT auth with register and login endpoints
feat: add note CRUD API with tag association
feat: create React frontend with routing and auth pages
feat: implement Markdown editor with preview
fix: resolve token storage key mismatch in frontend
fix: add CORS config for development environment
feat: add note search by title and content
refactor: extract API client into reusable module
feat: add dark mode support with Tailwind
docs: update README with setup instructions
chore: configure CI with GitHub Actions一共 11 次提交,覆盖了开发周期的完整轨迹。
08 · 部署上线
8.1 部署策略
| 服务 | 平台 | 原因 |
|---|---|---|
| 前端 | Vercel | 零配置、自动 HTTPS、全球 CDN |
| 后端 | Railway | 支持 Node.js、PostgreSQL、环境变量管理 |
| 数据库 | Railway Postgres | 与应用同平台,部署简单 |
| 文件存储 | 可选:Cloudinary | 后续扩展图片上传功能 |
8.2 前端部署到 Vercel
用 Agent 辅助配置:
Agent prompt:为 NoteFlow 前端配置 Vercel 部署。
需要:
1. 在 client/ 目录下创建 vercel.json
2. 配置 rewrites 让所有路由 fallback 到 index.html
3. 设置 build command 和 output directory
4. 添加 .env.example 说明需要的环境变量Agent 会在前端目录下创建:
{
"buildCommand": "npm run build",
"outputDirectory": "dist",
"devCommand": "npm run dev",
"rewrites": [
{ "source": "/(.*)", "destination": "/index.html" }
]
}然后通过 Vercel CLI 部署:
cd client
npx vercel --prod或者连接 GitHub 仓库启用自动部署——每次 push 到 main 分支自动构建。
8.3 后端部署到 Railway
Railway 的部署更简单:
- 在 Railway 面板创建新项目
- 连接 GitHub 仓库
- 设置启动命令:
cd server && npm run build && npm start - 设置环境变量:
DATABASE_URL、JWT_SECRET、PORT - Railway 会自动检测 Node.js 项目并部署
8.4 环境变量管理
# .env (本地开发)
DATABASE_URL="file:./dev.db"
JWT_SECRET="dev-secret-key"
PORT=3001
FRONTEND_URL="http://localhost:5173"
# 生产环境 (Railway)
DATABASE_URL="postgresql://user:pass@host:5432/noteflow"
JWT_SECRET="<随机生成的强密钥>"
PORT=8080
FRONTEND_URL="https://noteflow.vercel.app"8.5 持续集成
用 Agent 配置 GitHub Actions:
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_DB: noteflow_test
POSTGRES_USER: test
POSTGRES_PASSWORD: test
ports:
- 5432:5432
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: |
cd server && npm ci
cd ../client && npm ci
- name: Run backend tests
run: cd server && npm test
- name: Run frontend tests
run: cd client && npm test
- name: Build check
run: |
cd server && npm run build
cd ../client && npm run build8.6 部署清单
上线前逐项检查:
- 数据库迁移在生产环境执行过(
prisma migrate deploy) - JWT_SECRET 是强随机字符串,不是默认值
- CORS 配置了生产环境的前端域名
- 前端 API 地址指向生产后端
- 日志级别调整为 warn(开发环境是 debug)
- 关闭了 SQLite 的
PRAGMA journal_mode=WAL(生产用 PostgreSQL) - HTTPS 已配置
- 错误页面和 404 处理已就位
09 · 总结篇:从项目看能力
9.1 完整能力地图
通过 NoteFlow 这个 capstone 项目,你实际演练了 Cursor 的每一个核心能力:
Cursor 能力树
│
├── 规划层 ◄ Plan Mode
│ ├── 数据库建模
│ ├── API 设计
│ ├── 路由规划
│ └── 架构决策
│
├── 开发层 ◄ Agent + Tab
│ ├── 项目脚手架搭建
│ ├── 后端功能实现
│ ├── 前端页面开发
│ └── 接口联调
│
├── 质量层 ◄ Debug + Code Review
│ ├── 认证 Bug 修复
│ ├── CORS 配置修复
│ ├── 数据库查询修复
│ └── 代码安全审查
│
└── 部署层 ◄ Agent + Terminal
├── 构建配置
├── 环境变量管理
├── CI/CD 配置
└── 自动化部署9.2 各模式的适用场景速查
| 模式 | 最佳使用时机 | 一句话描述 |
|---|---|---|
| Plan Mode | 开始新模块、做架构决策、讨论方案 | ”先想清楚再动手” |
| Agent | 实现完整功能、搭建项目骨架、重构 | ”自动化执行已知方案” |
| Tab 补全 | 日常编码、编写模板代码、重复模式 | ”预测你想写的每一行” |
| Debug 模式 | 遇到错误、调试异常行为、排查问题 | ”带着专家一起看报错” |
| 普通 Chat | 代码修改建议、技术问答、代码解释 | ”随时可以问的伙伴” |
9.3 从项目中获得的经验
1. 模式切换的节奏感
一个典型的开发循环是这样的:
Plan Mode(5 分钟) → 讨论方案
Agent(15 分钟) → 实现功能
手动测试(3 分钟) → 验证正确性
Tab 补全 + 手动编码(10 分钟) → 打磨细节
Debug 模式(如果有问题) → 修复 Bug
Git 提交(2 分钟) → 保存工作循环往复,每个功能模块大约 30-45 分钟。
2. 人机协作的分界线
| 交给 AI 做 | 自己把控 |
|---|---|
| 代码实现、模板模式 | 架构决策、技术选型 |
| Bug 定位、错误分析 | 修复方案审批 |
| 测试用例编写 | 测试范围定义 |
| 重复性编码 | 业务逻辑确认 |
| 配置脚本 | 安全与性能的权衡 |
3. 能力的复利效应
Tab 补全每天节省 30% 的击键 → 一个月累积节省数小时 Agent 每次实现一个功能节省 50% 时间 → 一个月多做 2-3 个功能 Debug 模式每次省去 10 分钟排查时间 → 一个月少遇到数十次卡壳
这些节省不是线性的,而是复利的——你省下的时间可以去做更高层的设计,而更好的设计又减少了后期的 Bug,形成正向循环。
9.4 三大心智模型
| 模型 | 来源 | 核心思想 | 在 Cursor 中的体现 |
|---|---|---|---|
| 慢规划快编码 | 本书核心原则 | 规划阶段花时间是效率最高的投资 | Plan Mode 先讨论,Agent 后执行 |
| 人机协作分界线 | 软件开发实践 | 知道什么交出去、什么自己把控 | 架构你决定,代码 Agent 写 |
| 能力的复利 | 复合增长思维 | 工具节省时间 → 时间换能力 → 能力又节省更多时间 | 每个功能用 Cursor 都比上次更快 |
这三大模型不仅是 Cursor 的使用指南,也是你在 AI 辅助时代持续成长的核心方法。
10 · 延伸阅读与下一篇
10.1 可继续探索的方向
NoteFlow 完成了基线功能,但还有很多可扩展的方向:
- 富文本编辑器:替换为 TipTap 或 Slate,支持更丰富的编辑体验
- 图片上传:集成 Cloudinary 或 S3,在笔记中插入图片
- 协作编辑:用 WebSocket + CRDT 实现实时协作
- AI 辅助写作:集成 OpenAI API,实现自动补全、摘要、翻译
- 离线 PWA:用 Service Worker 实现离线访问
- 移动端适配:用 React Native 或 Tauri 打包为移动应用
- 多语言支持:用 i18next 实现国际化
10.2 学习路径总结
| 阶段 | 目标 | 主要 Cursor 能力 | 产出 |
|---|---|---|---|
| 第 1-10 篇 | 基础操作 | Chat、Tab、Composer | 能写简单脚本 |
| 第 11-25 篇 | 进阶能力 | Agent、Plan Mode、Debug | 能独立开发模块 |
| 第 26-36 篇 | 高级技巧 | Git 集成、CI/CD、Code Review | 能管理项目 |
| 第 37 篇(本篇) | 综合实战 | 全流程串联 | 能独立交付项目 |
10.3 下一步
如果你已经跟着走完了 NoteFlow 的全流程,接下来可以:
- 回看薄弱环节:哪一步让你卡最久?翻到对应的文章再读一遍
- 复盘项目:用自己的话写一篇回顾,哪里的设计可以更好?
- 开始自己的项目:用 Cursor 去构建你真正想做的产品——一个个人博客、一个小工具、一个 Side Project
- 保持学习:关注 Cursor 的更新,新功能(如
.cursorrules、Composer 改进)持续出现
提示:你也可以回到第 36 篇,了解更多 Git 工作流的进阶技巧。
下一篇将进入附录部分,包括常见问题、快捷键速查表、以及参考资源。
10.4 参考资料
下一篇: 附录 A · 常见问题与排错指南
回到目录:Cursor 完全指南
本文是 “Cursor 完全指南” 系列的第 37 篇。通过 NoteFlow 这个完整的全栈项目,你将 Plan Mode、Agent、Tab 补全、Debug 模式、Git 工作流和部署串联成一条完整的开发流水线。从现在开始,每一个新项目都是一个 capstone。