ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 Cursor 一天上线工具站:Next.js + shadcn-ui + Vercel 部署,TaoToken 统一 Key 配置骨架

用 Cursor 一天上线工具站:Next.js + shadcn-ui + Vercel 部署,TaoToken 统一 Key 配置骨架 1. 从 Java 实体类转 JSON 这个需求说起独立开发者想一天上线一个工具站最怕的不是写代码而是被环境、依赖、部署这些杂事拖住。我这次做的工具站功能很窄把 Java 实体类粘贴进去点一下按钮输出对应的 JSON 示例。起因是写设计文档时接口的入参出参要手敲 JSON字段一多就很容易漏。搜了一圈市面上大多是 JSON 转 Java 实体类反向的工具反而少于是决定自己做一个。技术选型上我一开始用 Python 的 streamlit 快速验证逻辑功能能跑通但界面实在拿不出手。后来换成 Next.js shadcn-ui用 Cursor 辅助开发部署走 Vercel域名接 Cloudflare 做加速。整套流程跑下来从初始化到线上可访问一天时间是够的前提是把配置骨架提前定好别在环境上反复折腾。这篇文章会交付可复制的settings.json、config.toml骨架以及 TaoToken 统一 Key 的接入步骤再给出本地启动、构建、线上验证的逐条动作。适合已经会一点前端、想快速把想法变成可访问网站的人。2. TaoToken 前置统一 Key 与接入准备在开始写业务代码之前先把模型调用的入口统一掉。工具站本身可能只需要一个转换逻辑但后续你想加 AI 润色、字段注释生成、错误提示优化都会用到模型能力。如果每个功能各自去配 Key后面维护会很乱。TaoToken 的作用就是提供一个统一的 Key兼容常见的模型调用方式省去多平台切换的麻烦。你需要先拿到一个 API Key。访问官网注册后在控制台里创建官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content控制台创建 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsoleAPI Keys 管理页https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keysAPI 的基础地址是https://taotoken.net/api这个地址在配置里会用到注意它不带 UTM 参数直接写进配置文件即可。注意Key 只放在本地.env.local或部署平台的环境变量里不要提交到 GitHub。Vercel 部署时在项目设置里单独加环境变量。如果你后面要长期用 Cursor 做编码、跑 Agent 任务可以了解 Coding Plan它更适合持续性的开发场景Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan3. 可复制配置settings.json 与 config.toml 骨架Cursor 的配置分两块一块是编辑器层面的settings.json一块是模型接入相关的config.toml。下面这两个骨架可以直接复制改掉 Key 就能用。3.1 Cursor settings.json 骨架这个文件放在用户配置目录下Windows 一般在%APPDATA%\Cursor\User\settings.jsonmacOS 在~/Library/Application Support/Cursor/User/settings.json。核心是把默认的模型请求指向统一入口。{ editor.formatOnSave: true, editor.defaultFormatter: esbenp.prettier-vscode, files.autoSave: onFocusChange, terminal.integrated.defaultProfile.osx: zsh, terminal.integrated.defaultProfile.linux: bash, cursor.general.enableShadowWorkspace: true, cursor.cpp.disabledLanguages: [], cursor.chat.defaultModel: claude-3-5-sonnet, cursor.chat.customApiBase: https://taotoken.net/api, cursor.chat.customApiKey: ${env:TAOTOKEN_API_KEY}, typescript.tsdk: node_modules/typescript/lib, tailwindCSS.experimental.classRegex: [ [cn\\(([^)]*)\\), [\]([^\]*).*?[\]] ] }这里用${env:TAOTOKEN_API_KEY}引用环境变量避免把 Key 写死在文件里。你需要在系统环境变量里加一个TAOTOKEN_API_KEY值就是控制台里创建的那串。3.2 config.toml 骨架有些工具链或 CLI 会读config.toml比如你在项目里跑脚本调用模型时。放在项目根目录或者用户配置目录都行内容如下[api] base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} timeout 60 max_retries 3 [model] default claude-3-5-sonnet fallback gpt-4o-mini temperature 0.3 max_tokens 4096 [project] name java2json-tool framework nextjs ui shadcn-ui deploy verceltemperature设成 0.3 是因为代码转换类任务需要稳定输出太高容易生成奇怪的字段名。max_retries给 3 次网络抖动时自动重试。3.3 Next.js 项目环境变量在项目根目录建.env.localTAOTOKEN_API_KEY你的Key TAOTOKEN_BASE_URLhttps://taotoken.net/api NEXT_PUBLIC_SITE_URLhttps://你的域名.env.local要加进.gitignoreVercel 部署时在 Project Settings → Environment Variables 里手动加同样的键值。4. Next.js shadcn-ui 项目初始化与组件拼装配置骨架定好后开始建项目。这一步 Cursor 能帮你生成大部分命令但有几个坑要提前避开。4.1 初始化 Next.js 项目在终端里执行npx create-next-applatest java2json-tool --typescript --tailwind --eslint --app --src-dir --import-alias /* cd java2json-tool参数说明--app用 App Router--src-dir把代码放src目录--import-alias /*配置路径别名后面 import 组件更清爽。4.2 初始化 shadcn-ui这里有个版本坑。Cursor 早期给的命令是npx shadcn-uilatest init但某些版本会卡住或报错。实测下来换成指定版本更稳npx shadcn-ui0.7.0 init初始化时会问你几个问题样式选 Default基础色选 SlateCSS 变量选 Yes。完成后项目里会多出components.json和src/components/ui目录。接着按需添加组件npx shadcn-ui0.7.0 add button textarea card tabs toast这几个组件够用了textarea放 Java 代码输入button触发转换card做结果展示区tabs切换输入输出视图toast做复制成功提示。4.3 页面结构拼装我想要的布局是左右结构左边输入框右边结果框顶部一个导航栏。在src/app/page.tsx里大致这样组织import { Textarea } from /components/ui/textarea; import { Button } from /components/ui/button; import { Card, CardContent, CardHeader, CardTitle } from /components/ui/card; export default function Home() { return ( main classNamemin-h-screen bg-slate-50 nav classNameflex items-center justify-between px-6 py-4 border-b bg-white span classNamefont-bold text-lgJava2JSON/span span classNametext-sm text-slate-500统一 Key 驱动/span /nav div classNamegrid grid-cols-1 md:grid-cols-2 gap-4 p-6 Card CardHeaderCardTitleJava 实体类/CardTitle/CardHeader CardContent Textarea placeholder粘贴 Java 代码... classNamemin-h-[400px] / /CardContent /Card Card CardHeaderCardTitleJSON 结果/CardTitle/CardHeader CardContent pre classNamemin-h-[400px] bg-slate-900 text-slate-100 p-4 rounded-md overflow-auto / /CardContent /Card /div div classNameflex justify-center pb-8 Button sizelg生成 JSON/Button /div /main ); }告诉 Cursor 你要的布局它会帮你补全状态管理和事件绑定。转换逻辑可以先写个简单的正则解析后面再接模型做复杂字段推断。4.4 接入 TaoToken 做字段推断当 Java 类里有嵌套对象、泛型、枚举时纯正则不够用。这时在 API Route 里调模型// src/app/api/convert/route.ts import { NextResponse } from next/server; export async function POST(req: Request) { const { code } await req.json(); const res await fetch(${process.env.TAOTOKEN_BASE_URL}/v1/chat/completions, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer ${process.env.TAOTOKEN_API_KEY}, }, body: JSON.stringify({ model: claude-3-5-sonnet, messages: [ { role: system, content: 你是 Java 转 JSON 助手只输出 JSON不要解释。 }, { role: user, content: code }, ], temperature: 0.2, }), }); const data await res.json(); return NextResponse.json({ result: data.choices[0].message.content }); }前端按钮点击时fetch(/api/convert)把结果填到右侧pre里。5. 本地启动、构建与 Vercel 部署验证代码写得差不多接下来是逐条动作验证。5.1 本地启动npm run dev打开http://localhost:3000粘贴一段 Java 代码点按钮看右侧是否出 JSON。如果报错先看终端日志再把报错整段复制给 Cursor它基本能定位。5.2 本地构建这一步很关键Vercel 部署失败大多是因为本地没跑构建npm run build构建时会做严格检查。比如你定义了一个变量没用或者 import 了没使用的组件都会报错。解决办法就是哪里报错点哪里删掉无用变量或补上使用逻辑。构建通过后再跑一次npm run start确认生产模式正常。5.3 推送到 GitHub 并部署 Vercelgit init git add . git commit -m init java2json tool git remote add origin 你的仓库地址 git push -u origin main然后在 Vercel 里 Import 这个仓库框架会自动识别为 Next.js。在环境变量里加上TAOTOKEN_API_KEY、TAOTOKEN_BASE_URL、NEXT_PUBLIC_SITE_URL点 Deploy。等一两分钟Vercel 会给你一个xxx.vercel.app的临时域名。5.4 Cloudflare 域名接入Vercel 分配的域名在国内访问偏慢解决办法是自己买个域名解析到 Cloudflare 做 CDN 加速。在 Cloudflare 添加站点把域名的 NS 记录改成 Cloudflare 给的两个地址。等生效后在 DNS 里加一条 CNAME 指向cname.vercel-dns.com然后在 Vercel 的 Domains 里绑定你的域名。这里有个高频坑域名托管到 Cloudflare 后访问一直提示重定向次数过多。原因是 SSL/TLS 加密模式没设对。进 Cloudflare 的 SSL/TLS 菜单把加密模式设为「完全Strict」问题就解决了。5.5 线上验证清单部署完成后逐条确认打开你的域名页面能正常加载没有 502 或重定向循环粘贴一段带嵌套对象的 Java 代码点生成右侧出 JSON点复制按钮toast 提示成功手机浏览器打开布局没有错乱在 Vercel 的 Functions 日志里看 API Route 有没有报错全部通过工具站就算上线了。6. 本篇常见错排查shadcn-ui 初始化卡住或报错换指定版本npx shadcn-ui0.7.0 init别用latest。如果还不行删掉node_modules和package-lock.json重来。Vercel 构建报 unused variable本地npm run build先跑一遍把 ESLint 报的未使用变量删掉。也可以在next.config.js里临时关掉严格检查但不推荐容易埋隐患。API Route 返回 401检查 Vercel 环境变量里TAOTOKEN_API_KEY有没有加值有没有多余空格。本地.env.local和 Vercel 环境变量是两套别只配一边。Cloudflare 重定向次数过多SSL/TLS 加密模式设为「完全Strict」。如果还不行检查 Cloudflare 的 Page Rules 有没有强制 HTTPS 的规则和 Vercel 的冲突。域名解析不生效NS 记录变更通常要几十分钟到几小时用dig 你的域名确认 NS 是否已指向 Cloudflare。CNAME 记录不要加代理状态为「仅 DNS」以外的设置除非你确认要开橙云。模型返回带 markdown 代码块在 system prompt 里明确「只输出 JSON不要用代码块包裹」或者在解析时用正则去掉json 和。7. 后续扩展与统一 Key 的长期用法工具站上线只是第一步。后面你想加功能比如 Java 转 TypeScript、JSON 转 Java、字段注释自动生成都可以复用同一套 TaoToken Key 和 API Route 结构。统一 Key 的好处在这里体现出来不用每个功能去申请不同平台的账号配置一次多处调用。如果你打算长期用 Cursor 做编码和 Agent 任务可以看看 Coding Plan它更适合持续性的开发场景Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan想直接测试模型输出效果可以用模型对话页模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentchat接入过程中遇到报错先查接入文档接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdocKey 管理和新建在 API Keys 页API Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keys整套流程跑下来最耗时的其实是环境配置和部署排错业务逻辑本身用 Cursor 辅助写得很快。把settings.json和config.toml骨架提前定好Key 统一走 TaoToken后面加功能就是复制粘贴改改的事。
返回列表