【免费下载链接】vibe-coding-toolkit
A curated, battle-tested AI-coding toolkit: Claude Code plugins, subagent orchestration, quality gates, and ready-to-copy prompts, extracted from real production use.
vibe-coding-toolkit 是一个经过实战检验的 AI 编程工具包,其中内置了一套可直接复制到项目的 Next.js 服务端架构模板:用 Drizzle 管理数据库连接、用 Zod 校验环境变量、用 Pino 输出脱敏后的结构化日志。本文带你逐层解析这套模板的设计思路,帮你在 AI 辅助编程(Vibe Coding)场景中快速搭起一个规范、安全、可测试的服务端骨架。
为什么需要现成的服务端架构模板?
很多新手用 AI 写 Next.js 项目时,会遇到这些反复出现的坑:
- 环境变量不校验,
DATABASE_URL拼错要到运行时才发现; - 数据库连接每次请求都新建,连接池泄漏;
- 日志里不小心把密码、token 打了出来;
- AI 生成的代码直接
console.log,页面和数据库耦合混乱。
vibe-coding-toolkit 的答案是:把这些"生产级细节"沉淀为可复制的模板,而不是让 AI 每次重新发明。模板位于 templates/next/,官方使用顺序和决策依据记录在 docs/06-project-defaults.md 中。
模板目录总览:一次看懂服务端分层
整套模板的文件组织非常克制,核心就三个目录加两个配置文件:
templates/next/ ├── drizzle.config.ts.example # Drizzle 迁移工具配置 ├── vitest.config.mts.example # Vitest 测试配置 └── src/ ├── db/ │ ├── index.ts.example # 数据库连接池(唯一入口) │ ├── index.test.ts.example # 连接池生命周期测试 │ └── schema/index.ts.example # 表结构(留空,按需补充) └── lib/ ├── env-schema.ts.example # Zod 校验规则 ├── env.ts.example # 环境变量的唯一读取入口 ├── logger.ts.example # Pino 日志器 └── utils.ts.example # cn 类名合并工具每一块都配套了测试文件——这是这套模板最值得学习的点:架构不只是代码,还包括"如何证明它是对的"。
Zod 落地实践:环境变量"先验证,再使用"
环境变量的校验逻辑集中在 env-schema.ts.example。它做了两件很实用的事:
- 定义校验规则:
databaseUrlSchema要求连接串必须是postgres:或postgresql:协议且带主机名,logLevelSchema则限定日志等级只能是trace到silent七种取值之一。 - 统一的读取函数
parseEnv:校验失败时只抛出"Invalid or missing environment variable: 变量名"这样的错误,不会把变量里可能包含的密码带进报错信息。
随后 env.ts.example 只暴露getDatabaseUrl()和getLogLevel()两个函数,文件首行是import "server-only"——从物理上阻止这段代码被打进浏览器端,密钥永远不会出现在客户端 bundle 里。
对应的测试 env.test.ts.example 甚至专门验证了"错误协议 URL 被拒绝时,测试用的敏感值不会出现在异常消息里",把安全细节变成了可回归的检查项。
Drizzle 落地实践:一个有边界的连接池
数据库访问的唯一入口是 db/index.ts.example 里的getDb(),它的实现包含几个新手容易忽略的工程细节:
- 按需创建:
getDb()被调用时才创建连接池,所以项目首次 build、lint、跑无 I/O 的测试都不需要真实数据库; - 池化且有上限:
max: 5、5 秒连接超时、30 秒空闲回收,避免连接无限增长; - 缓存复用:池实例挂在
globalThis上,开发时热更新(HMR)不会反复建池; - 静默错误:空闲连接出错时只记录错误码,不打出完整连接串。
drizzle.config.ts.example 则配置了 drizzle-kit:方言为 PostgreSQL,schema 指向src/db/schema/index.ts,并支持DATABASE_URL_UNPOOLED直连地址(部分云厂商跑迁移要求直连)。
一个容易被忽略的约定写在 schema/index.ts.example 里——schema 默认是空的,注释明确要求"只添加从产品描述派生出来的表,不要内置虚构的业务数据"。这防止了 AI 生成项目时塞进一堆假表。迁移流程遵循"生成 SQL → 人工审阅 diff → 在受控目标执行",相关规则详见 docs/06-project-defaults.md 的"银行和架构"章节。
Pino 落地实践:结构化日志与敏感信息脱敏
日志模块 logger.ts.example 基于 Pino 构建,核心是redact配置:
redact: { paths: ["password", "token", "secret", "authorization", "cookie", "DATABASE_URL", "req.headers.authorization", ...], remove: true, },意思是:无论日志对象里出现password、token、cookie还是完整请求头,Pino 都会直接删除这些字段,而不是打码。日志等级由前面介绍过的LOG_LEVEL环境变量控制,缺省为info。
测试文件 logger.test.ts.example 模拟了一次"带满敏感信息的请求日志",断言输出中不含任何密钥值、同时保留了requestId这类排查需要的上下文——脱敏和可用性必须同时成立。
质量护栏:ESLint 与 Vitest 如何守住架构
光有模板还不够,vibe-coding-toolkit 用 lint 规则强制架构不变形。完整版配置见 next-app.config.mjs.example,它包含几条针对本架构的关键规则:
| 规则 | 守护的边界 |
|---|---|
quality/no-direct-console | 服务端日志必须走 Pino,禁止console.log |
quality/no-direct-data-access | 页面(app/)和组件(components/)层禁止直接引用@/db,数据访问只能在专门的层 |
drizzle/enforce-delete-with-where/enforce-update-with-where | 没有where条件的delete/update直接报错,防止误清空表 |
quality/max-lines(350 行) | 控制单文件复杂度 |
测试方面,vitest.config.mts.example 采用 Node 环境、@别名指向src/。db/index.test.ts.example 用 mock 验证了"缺配置时不建池""多次调用只建一个池""空闲错误不泄漏连接串"三条核心行为。所有测试都不依赖真实数据库,跑一遍vitest run即可验证架构完整。
如何把模板用到自己的项目
落地步骤很简单:
- 按 templates/README.md 的说明,把
templates/next/整棵目录复制到你的应用,去掉.example后缀,但保留.env.example; - 安装依赖(Drizzle、Zod、Pino、Vitest 等),脚本示例见 docs/04-project-bootstrap.md 第 3 步;
- 在
.env.local中配置DATABASE_URL和LOG_LEVEL(.env.example只放变量名,不放真实凭据); - 运行
drizzle-kit generate生成 SQL,人工审阅后再执行迁移; - 用
lint + typecheck + test + build组成的检查链验证,全部命令可在 bootstrap 指南的脚本参考中找到。
💡 提示:模板里的 schema 是刻意留空的,请先根据你的产品需求定义真实的表结构,再执行迁移。
小结
这套 Next.js 服务端架构模板的价值不在代码量,而在把三类高频问题标准化了:Zod 管住"输入"、Pino 管住"输出"、Drizzle 管住"数据",再叠加 ESLint 边界规则和 Vitest 回归测试。无论是让 AI 从零搭项目,还是给现有项目补规范,这套模板都是可以直接复用的起点——完整决策依据请查阅 docs/06-project-defaults.md,执行流程请查阅 docs/04-project-bootstrap.md。
【免费下载链接】vibe-coding-toolkit
A curated, battle-tested AI-coding toolkit: Claude Code plugins, subagent orchestration, quality gates, and ready-to-copy prompts, extracted from real production use.
相关推荐
前后端分离架构实战:从职责划分到 Next.js 全栈落地(vibe-vibe 教程)
前后端分离架构实战:从职责划分到 Next.js 全栈落地(vibe vibe 教程) 前后端分离是 Web 应用开发中最核心的架构思想之一:前端负责"呈现",
文档教程Vibe Coding示例工程vibe-vibe 心法实战:6 个真实案例拆解思维模型如何落地 Vibe Coding
vibe vibe 心法实战:6 个真实案例拆解思维模型如何落地 Vibe Coding 本文基于 vibe vibe 开源教程 第二章「心法」的扩展案例库 h
文档教程Vibe Coding示例工程SunnyUI:基于C WinForm的终极开源控件库完全指南
SunnyUI:基于C WinForm的终极开源控件库完全指南 SunnyUI.NET是一款基于.NET Framework 4.0+、.NET6、.NET8、
UI组件桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考