Vibe Coding 实战项目
本章节我们将完整演示 Vibe Coding 的全过程——不是埋头写代码,而是用自然语言描述需求、让 AI 来执行。
最终目标就是不写一行代码,也能做出一个真实可用的 Web 应用。
先搞懂:Vibe Coding 到底是什么
Vibe Coding 这个名字来自 OpenAI 联合创始人 Andrej Karpathy 的一条推文。
他的意思是:你沉浸在产品的「氛围」里,忘记代码细节,只描述你想要什么,AI 帮你实现。
和你现在的编程方式有什么区别
传统编程Vibe Coding
记忆语法和 API,查文档用自然语言描述意图,AI 生成代码
逐行手写,自己调试多轮对话迭代,AI 写 + AI 改
先把整体设计好,再一行行写边聊边做,边做边调整
遇到 bug 自己搜、自己想错误信息直接丢给 AI,让它修
你的角色是实现者你的角色是设计者
Vibe Coding 的核心工作节奏
整个开发过程遵循一个简单的三步循环:
步骤你做什么AI 做什么
1. Plan描述需求和目标分析需求、给出技术方案
2. Execute确认方案、给出约束生成代码、修改文件
3. Verify运行验证、检查结果修复错误、调整输出
每完成一步就验证一步,通过之后再进入下一个循环。
这就是 Vibe Coding 的核心秘诀——不是一次性把所有需求丢给 AI,而是一小步一小步地推进,每步都确认方向正确。
环境准备
只需要三个东西,而且全部免费。
1. VS Code 编辑器
下载地址:https://code.visualstudio.com
VS Code 教程:https://www.runoob.com/vscode/vscode-tutorial.html
VS Code 支持 Windows / macOS / Linux,完全免费。
2. GitHub Copilot(VS Code 已内置,无需安装)
VS Code 最新版本已经内置了 GitHub Copilot,不需要安装任何扩展。
我们只需要做一件事:
打开 VS Code,点击右上角的 账户图标
选择 Sign in with GitHub,登录你的 GitHub 账号
登录后 Copilot 自动激活
如果没有 GitHub 账号,先去 github.com 免费注册一个。
打开编辑器就能看到 Copilot 入口,只需要登录 GitHub 账号即可,无需去扩展市场安装插件。
登录后查看:
点击右上角的小图标就可以调出 Copilot 聊天窗口:
3. Node.js
下载地址:https://nodejs.org
Node.js 教程:https://www.runoob.com/nodejs/nodejs-tutorial.html
选择 LTS 版本,安装后打开终端验证:
node -v # 应显示 v20.x.x 或更高
npm -v # 应显示 10.x.x 或更高
认识几个快捷键
这两个快捷键是你最常用的:
快捷键功能什么时候用
Ctrl+I(Mac: Cmd+I)内联 Chat选中一段代码,让 AI 解释或修改它
Ctrl+Shift+I(Mac: Cmd+Shift+I)Chat 面板和新功能开发相关的大段对话
Tab接受补全AI 给出灰色建议,按 Tab 接受
Esc拒绝补全AI 的建议不对,按 Esc 忽略
项目立项:我们要做什么
现在我们要用 Vibe Coding 方式构建一个完整的任务管理应用。
功能清单
创建、编辑、删除任务
任务有三种状态:待办、进行中、完成
优先级分三档:高(红色)、中(黄色)、低(绿色)
看板视图:三列拖拽改变任务状态
深色模式:一键切换
数据自动保存到浏览器(刷新不丢失)
手机也能用(响应式布局)
技术选型
做什么用什么为什么选它
前端框架Vue 3上手简单,社区活跃,中文资料多
构建工具Vite启动快,Vue 官方推荐
样式Tailwind CSS不用写 CSS 文件,直接在 HTML 里写样式类
数据存储localStorage浏览器自带,无需后端服务器
项目名称vibe-coding-runoob我们的实战项目名称
第一轮对话:搭骨架
现在我们开始真正的 Vibe Coding,不是一次性告诉 AI 所有需求,而是一步一步来。
Step 1:创建项目
打开终端,创建项目:
npm create vite@latest vibe-coding-runoob -- --template vue
打开新终端,进入该项目,然后按照 tailwindcss,使用 code . 命令让项目在 VS Code 中打开:
cd vibe-coding-runoob
npm install
npm install -D tailwindcss @tailwindcss/vite
code .
现在 VS Code 打开了项目,按 Ctrl+Shift+I(Mac: Cmd+Shift+I)打开 Copilot Chat 面板,右上角也有个切换面板的按钮:
Step 2:第一次对话
在 Chat 面板里输入下面这段话,就是把你想要的东西用自然语言说出来:
我在开发一个任务管理 Web App,项目名 vibe-coding-runoob。
技术栈:Vue 3 + Vite + Tailwind CSS。
请帮我搭建项目骨架,创建以下文件:
1. src/types/task.ts — 定义 Task 类型
字段:id, title, description, status, priority, dueDate, createdAt
status 可选值:'todo' | 'in-progress' | 'done'
priority 可选值:'low' | 'medium' | 'high'
2. src/App.vue — 应用主页面
- 顶部导航栏(标题"Vibe Coding Runoob")
- 中间显示任务列表区域
要求:
- 使用 Vue 3 script setup 语法
- 使用 Tailwind CSS 做样式
- 界面简洁干净,主色调用 indigo(靛蓝色)
- 现在先用假数据展示,后面再接真实功能
AI 会一段一段地输出代码并修改文件代码,你点击 保留 让它自动写入文件。
申请执行命令,你只需要点允许就可以了:
Step 3:验证
AI 代码写完后,会提示我们可以在终端运行:
npm run dev
右上角点击打开终端按钮,然后在终端执行命令:
浏览器打开 http://localhost:5173,看到页面就说明第一步成功了。
完成效果如下:
这就是 Plan → Execute → Verify 的第一轮。你描述了目标,AI 执行了,你验证了结果。后面的每一轮都按这个节奏来。
遇到不懂的代码?
Vibe Coding 不需要你读懂每一行代码。但如果某段代码你完全看不懂,选中它,按 Ctrl+I,输入:
用通俗的中文解释这段代码在做什么
AI 会用你能理解的语言解释它。
第二轮对话:实现任务列表和表单
骨架跑通了,现在来实现真正的功能。
Step 1:任务卡片组件
继续在 Chat 面板输入:
创建 src/components/TaskCard.vue 组件:
功能:
- 展示单个任务的信息:标题、描述、优先级标签、截止日期
- 优先级用颜色区分:high 红色、medium 黄色、low 绿色(左边框即可)
- 点击左侧复选框标记任务为完成(标题加删除线)
- 右上角有删除按钮(× 图标)
- 鼠标悬停时卡片微微放大(hover:scale-[1.02])
Props 接收:task(Task 类型)
Emit 事件:toggle(切换完成状态)、delete(删除任务)
AI 生成后文件写入点保留,命令执行点允许,最后效果:
然后创建任务列表容器:
创建 src/components/TaskList.vue 组件:
功能:
- 接收任务列表,用 TaskCard 展示每一项
- 任务按创建时间倒序排列(最新的在上面)
- 顶部有状态筛选按钮:全部 / 待办 / 进行中 / 完成
- 没有任务时显示空状态提示:"还没有任务,点击下方按钮创建第一个吧"
Step 2:创建任务表单
创建 src/components/TaskModal.vue 组件:
功能:
- 点击"+ 新建任务"按钮打开弹窗
- 表单字段:标题(必填)、描述(选填)、优先级(下拉选择)
- 标题为空时显示红色错误提示"标题不能为空"
- 点击弹窗外的灰色遮罩关闭弹窗
- 按 ESC 键关闭弹窗
- 提交后用 emit 把新任务传给父组件
使用 v-model 绑定表单数据
使用 Teleport 把弹窗渲染到 body 下
Step 3:把组件拼起来
现在更新 App.vue,把 TaskList 和 TaskModal 组合到一起:
更新 src/App.vue:
- 引入 TaskList 和 TaskModal 组件
- 使用 reactive 管理 tasks 数组(先用示例数据)
- 实现 addTask 函数:接收 TaskModal 提交的数据,添加到 tasks 数组
- 实现 toggleTask 和 deleteTask 函数
- TaskModal 的显示/隐藏用 ref(false) 控制
示例数据包含 2 条任务,让页面看起来不空
Step 4:验证
在浏览器里手动操作一遍:新建任务 → 点复选框标记完成 → 删除任务。全部功能正常运转后,进入下一轮。
第三轮对话:数据持久化
现在刷新页面任务就没了。我们需要把数据存到浏览器的 localStorage 里。
告诉 AI 你的需求
现在任务数据只存在内存里,刷新就没了。请把数据持久化到 localStorage:
1. 创建 src/utils/storage.ts:
- saveTasks(tasks): 把任务数组存为 JSON
- loadTasks(): 读取并解析 JSON,读取出错时返回空数组
- 存储键名:vibe-coding-runoob-tasks
2. 更新 src/stores/taskStore.ts:
- 用 Vue reactive 管理状态
- 初始化时从 localStorage 加载数据
- 使用 watch 自动监听变化并保存(deep: true)
- 导出 addTask、updateTask、deleteTask 函数
- 首次使用时如果没有数据,自动创建 3 条示例任务
3. 更新 App.vue,改为从 taskStore 获取数据和方法
验证
# 在浏览器中:
1. 添加几条任务
2. 刷新页面 → 任务还在!
3. 按 F12 打开开发者工具 → Application → Local Storage
4. 找到 vibe-coding-runoob-tasks,查看存储的 JSON 数据
如果数据没了,把 F12 控制台里的错误信息粘贴给 AI,让它修复。
第四轮对话:看板视图
需求描述
我想添加一个看板视图(Kanban),文件:src/components/KanbanBoard.vue
功能:
- 三列:待办 | 进行中 | 已完成
- 任务卡片显示在对应状态的列中
- 卡片可以拖拽到其他列(用 HTML5 原生拖拽 API)
- 拖入新列时自动更新任务的 status
- 在 App.vue 顶部加两个 Tab 按钮:"列表"和"看板"
- 切换时保持数据一致
注意:不需要引入任何拖拽库,用原生的 dragstart、dragover、drop 事件即可。
AI 生成后验证:拖一张卡片从「待办」到「进行中」,确认任务状态更新了。
第五轮对话:深色模式和移动端适配
深色模式
添加深色模式:创建 src/components/ThemeToggle.vue
功能:
- 点击按钮切换亮色/深色模式
- 在 html 标签上添加/移除 dark class
- 用 localStorage 记住用户选择(键名:vibe-coding-runoob-theme)
- 首次访问时跟随系统设置(prefers-color-scheme)
- 按钮放在导航栏右侧
同时给所有组件添加 dark: 前缀的深色样式。
移动端适配
适配手机屏幕(375px 宽):
- 看板三列在手机上改成竖向单列布局
- 任务模态框在手机上改成从底部滑出的样式
- 所有按钮的点击区域不小于 44px
- 表单输入框字号不小于 16px(防止 iOS 自动缩放)
- 导航栏在手机上用汉堡菜单
使用 Tailwind 的响应式类:sm: md: lg:
验证:在浏览器按 F12,切换到手机模式(375px),逐一检查每个页面。
遇到 Bug 怎么办:万能排错模板
这是 Vibe Coding 的「急救包」——遇到任何错误,直接用这个模板:
我遇到了一个问题,帮我修复:
【错误信息】
把终端或浏览器控制台的完整错误粘贴在这里
【我想实现的效果】
描述你期望发生什么
【我已经尝试过的方法】
列出你试过但没解决的操作
AI 会根据错误信息自动定位问题、给出修复方案。你不需要自己分析原因。
让 AI 审查你的代码
每完成一个大功能,在 Chat 里输入:
请审查我当前项目的代码,重点检查:
1. 有没有安全风险
2. 有没有性能问题
3. 错误处理是否完整
4. 有没有可以简化的地方
AI 会逐条给出问题和修复建议。这是有经验的开发者才能做的事——但有了 AI,你也能做到。
部署上线
项目做好了,最后一步是让它上线,任何人都能访问。
推送到 GitHub
$ git init
$ git add .
$ git commit -m "feat: vibe-coding-runoob 任务管理应用"
# 在 github.com 创建同名仓库后:
$ git remote add origin https://github.com/你的用户名/vibe-coding-runoob.git
$ git push -u origin main
部署到 Vercel
访问 vercel.com,用 GitHub 账号登录
点击 Add New Project,选择 vibe-coding-runoob 仓库
Framework 选 Vite,直接点 Deploy
等 1-2 分钟,拿到 xxxx.vercel.app 域名
把链接发给朋友,他们就能用你的应用了。
Vibe Coding 总结
写好提示词的公式
好的提示词 = 目标 + 约束 + 上下文
不推荐推荐
帮我做一个任务列表创建 TaskList.vue 组件。功能:展示任务列表,含标题、状态、优先级标签。使用 Tailwind CSS,数据通过 props 传入。不要引入第三方 UI 库。
迭代节奏
每次对话 → 只做一个功能
每次修改 → 立刻在浏览器里验证
每个功能完成 → 立刻 git commit
每天结束 → push 到 GitHub
不要攒很多修改再一起测试,那是给自己制造麻烦。
这些事不要丢给 AI
完全不看代码就接受——至少要知道改了哪些文件
AI 说「这段代码有安全风险」时,认真看待
上线前不手动测试每一个功能
- 真心话大冒险❓ 真心话大冒险常见问题 游戏模式 😊🌶️ 温和模式和刺激模式有什么区别? 温和模式:适合所有年龄段,包含235个家庭友好的问题和挑战,...
- QQ农场回归:老玩家带你重温那些年的偷菜情怀与避坑指南!兄弟们,姐妹们,QQ经典农场真的要回来了!如果你跟我一样,当年也是半夜定闹钟起来偷菜的老农场主,那这篇攻略就是为你准备的。咱们不...
- 哄睡的秘诀在于那关键的10分钟!让宝宝安稳入睡的7种方法引言:为什么哄睡中的“10分钟”很重要?婴儿的睡眠,“入睡前的10分钟”是关键。因为在这短短的时间内,如果副交感神经占主导地位,就能...
- (即将主网)小草 grass 钱包绑定教程运行几个月的 Grass,终于再次迎来了大动作,现在可以确认邮箱以及绑定 sol 钱包地址了,猜测即将主网历史文章可参考:( 明牌必撸 ) 突然爆火...
- 怎么看手机卡的号码是多少?手机卡大家都不陌生,一般来说大多数手机卡都是有一个号码的,而很多人在需要使用手机号码的时候,却不记得,那么这种情况我们该如何查...
- 摩拜单车怎么用 摩拜单车app使用图文教程摩拜单车怎么用?摩拜单车是当前十分实用的自行车租借软件,操作简便,智能化借车,下文介绍摩拜单车app使用图文教程,一起和小乐哥来了...
- 皮卡堂6月5日全区更新公告皮卡堂6月5日全区更新公告 发表时间: 2025-06-05 作者:编辑 尊敬的玩家,您好! 我们将于6月5日09:00关闭服务器,进行游戏版本更新。持续时间...
- QQ被盗怎么冻结QQ号?紧急冻结QQ号操作流程如今网络在带给我们精彩内容时,也隐藏了很多危险,有时QQ操作不当就会出现盗号情况,一般发现自己QQ被盗用了,减少账号损失最便捷方式,...
- 英雄联盟ADC英雄胜率排名:揭示最强ADC最近一段时间,很多朋友在上分过程中都遇到了不小的阻碍, 尤其是ADC位置的改变较大,那么本期玩咖宝典就给大家整合了当前版本综合胜率最...
- iCloud 钥匙串iCloud 钥匙串会保存您的网站用户名和密码以及使用 Safari 设置的信用卡信息,并在 iPhone 和您指定的其他 iOS 设备以及运行 OS X Mavericks 的 Mac 上保...