业务背景与 Vibe Coding 范式
实战任务为团队搭建一套可复用、可维护、企业级标准的 Node.js 通用脚手架技术栈Hono.js Drizzle ORM PostgreSQL必须包含统一错误处理、结构化日志、完整用户模块、RBAC 权限控制模块等通用能力。2. 使用工具Claude Cli3. 开发范式严格遵循目前最火的 SDDSpec-Driven Development规格驱动开发范式来开发这也是 Vibe Coding 最推崇的标准化流程。接着理清一下 vibe coding 和 SDD 范式的概念有基础的同学可以省略这部分阅读。4. vibe coding 是什么这个词由前 OpenAI 首席科学家 Andrej Karpathy 带火。它的核心逻辑不是“AI 辅助”而是“意图接管”一句话描述就是不看代码、不理解实现只用自然语言驱动 AI 生成代码并以“能跑”为唯一标准的开发方式。你会说那报错咋办那就把报错丢给 AI直到没有错误为止。5. SDD 规范是什么为了让大家秒懂什么是 SDD我简单拆解一下它的三部曲。想象你要开发一个新项目老板要开新业务产品经理先出个产品文档。在 SDD 规范里这叫 spec.md。它只聚焦用户价值和业务意图不聊技术只聊“我们要干什么”。有了产品文档研发得定框架、写技术文档。在 SDD 规范中这叫 plan.md。有了技术文档接下来就是搬砖了。以前是我们人来写代码现在交给 AI得先让它把要做的事写成任务列表这在 SDD 规范中叫 tasks.md。最后确认 tasks.md 没有问题就要开始开发了。但是开发过程中一般技术人都有自己的团队规范例如变量命名规范是什么代码接口规范是什么等等。这种全局性的“游戏规则”在 SDD 规范中交 constitution.md。其实本质就是不断拆解你的需求最后对齐 ai 到底帮我们做哪些任务。企业级实战两个真实翻车案例吐槽一下维护 SDD 这个范式的文档本身就非常费力了。我严格按照 SDD 流程执行甚至放弃「一次性生成任务」task.md尝试改进 SDD 的用法采用小步生成 逐次核查依然频繁翻车。翻车的场景特别多我举两个案例。案例 1数据库表设计 —— 冗余索引致命隐患第一个小案例关于建表这个 task 我都把表结构很清晰的展示出来了。如下:CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), email VARCHAR(255) UNIQUE NOT NULL, -- ... 其他字段 );重点email 明确标注 UNIQUE唯一约束。AI 生成的 Drizzle 代码export const users pgTable(users, { id: uuid(id).primaryKey().defaultRandom(), email: text(email).notNull().unique(), // ... 其他字段 (table) [ index(idx_email).on(table.email), // 致命的“画蛇添足” ] });问题在哪里在 PostgreSQL/MySQL 中UNIQUE 约束 自动创建唯一索引AI 额外手动添加了一行索引如下export const users pgTable(users, { // ... (table) [ index(idx_email).on(table.email), // 致命的“画蛇添足” ] });导致的就是✅ 代码不报错✅ 功能能跑通❌ 冗余索引 → 占用额外存储❌ 写入性能大幅下降❌ 长期埋下数据库性能隐患然后Vibe Coding 的逻辑死结出现了不纠正线上系统埋雷后期必出性能问题要纠正必须写一段比代码还长、比编程还复杂的自然语言提示词请使用 Drizzle ORM 定义 users 表email 字段添加 unique 约束但禁止在回调函数中手动创建 idx_email 索引因为 unique 约束会自动生成索引重复索引会造成性能浪费与存储冗余这已经不是「描述需求」而是用自然语言写代码。案例 2依赖管理 —— 隐蔽的工程规范错误我在文档中明确写明环境规则本地开发使用 dotenv 加载环境变量生产环境通过 docker-compose 注入变量不需要 dotenv结果 AI 直接把 dotenv 安装到了dependencies: { dotenv: ^17.1.13 }正确做法应该是devDependencies: { dotenv: ^17.1.13 }明显 dotenv 这个库我明确说明了线上环境不会用但 AI 依然给安装到了 dependencies 中。结果咋说呢, 代码不报错, 项目能启动, 但生产环境打包体积增大不符合企业级工程规范。以上的案例都有一个特点就是代码不会报错但肯定是都是比较明显的问题。问题到底在哪所有翻车案例最终都指向三个底层逻辑死结。