Vite + TanStack Start 工程栈
基于 Vite、TanStack Start 与 SSP UI Registry 构建高性能客户端应用
为什么选择这一栈
Vite + TanStack Start 聚焦于极致的开发体验与客户端渲染效率,利用 Vite 的快速启动与热更新,以及 TanStack 系列(Router、Query、Start)提供的文件路由、数据管理和执行模型。本指南结合 SSP UI Registry 的能力,快速搭建具备主题、多语言、数据访问层与工程化保障的现代前端栈。
首次出现的缩写会在括号内说明,方便团队成员对齐概念:
- CSR(Client-Side Rendering):在浏览器执行渲染逻辑,适合高度交互、即时响应的应用。
- TTRPC(TanStack Router Page Component):TanStack Start 中通过路由文件定义的页面组件,与 Loader/Action 搭配使用。
栈组成概览
| 能力 | 推荐工具 | 作用 |
|---|---|---|
| 框架 | Vite 6 + TanStack Start | 提供文件路由、Server Functions 与选择性 SSR |
| 数据管理 | TanStack Router + TanStack Query | 统一路由、数据加载与缓存策略 |
| 样式体系 | Tailwind CSS v4 + SSP Theme | 下载 ssp-style.json 后自动增量更新 src/App.css |
| UI 组件 | 符合 shadcn Registry 规范的能力(shadcn/ui、本 Registry、21st.dev 等) | 复用基础组件与 Block,提高 UI 交付效率 |
| 多主题 | 自定义 Theme Provider(基于 Context/Store + CSS 变量) | 实现明暗主题与自定义主题切换 |
| 国际化 | react-i18next | 在 Vite 环境下提供组件级与 hook 级的多语言支持 |
| 数据访问 | make-api-request + use-tanstack-query | 定义类型安全、具备缓存控制的数据访问层 |
| 状态管理 | zustand | 轻量的全局状态存储,与 React 组件友好 |
| 类型/校验 | zod | Schema 校验 + TypeScript 类型推导 |
| 动效 | motion(Framer Motion 官方包) | 控制页面与组件动效 |
| 质量保障 | @biomejs/biome | 统一 Linter 与 Formatter,保障代码质量 |
项目初始化与依赖
- 按照 TanStack Start 官方 Quick Start 使用 CLI 或示例仓库创建项目。
- Tailwind CSS v4 默认通过
src/App.css维护主题与 Design Token,无需额外配置文件。 - 包管理工具依团队规范选择(Bun、pnpm、npm 均可),建议通过 Registry CLI 下载 SSP 能力,避免在文档中硬编码包版本。
样式与主题整合(SSP Theme)
- 在本站点下载
ssp-style.json,执行后将自动增量更新src/App.css。 - 多主题(包括暗色模式)可结合 Context + CSS 变量实现,例如:
- 在
src/theme/theme-provider.tsx中定义ThemeProvider,利用document.documentElement切换data-theme或class。 - 将
ssp-style.json中的变量映射到:root与[data-theme="dark"],并在组件中使用。
- 在
TanStack Start 尚无官方主题切换库,可根据团队需求实现轻量的 Context 或 Zustand Store,或参考社区方案。
UI 与 Block 组件实践
- 通过 shadcn/ui CLI 或其他兼容 Registry 下载基础组件,在
src/components/ui目录维护。 - 从 SSP UI Registry 引入增强组件或 Block(例如
gh-stargazers-button),用于骨架屏、营销组件等场景。 - 建议建立
src/components/registry.ts聚合导出常用组件,方便在路由页面与可重用模块中引用。
国际化(react-i18next)
- 参考
react-i18next官方文档 配置语言资源与 Provider。 - 在 TanStack Start 中,可在
src/app.tsx或src/routes/__root.tsx中包裹I18nextProvider,并使用useTranslationHook 提供文案。 - 建议将语言资源存放于
src/locales/<language>.json,并结合 Loader 在路由加载时注入。
数据访问层:make-api-request + use-tanstack-query
这两个 Registry 能力组合与 TanStack Query 的 Loader API 一起构成数据访问层。详细文档参阅 Make API Request Item。
import { makeApiRequest } from "@/registry/ssp/item/make-api-request/base"
import { ProductApi } from "@/registry/ssp/item/make-api-request/example/index.template"
export const fetchProducts = () => makeApiRequest(ProductApi.getProducts)import { createFileRoute } from "@tanstack/react-router"
import { useQuery } from "@tanstack/react-query"
import { useTanstackQuery } from "@/hook/use-tanstack-query"
import { fetchProducts } from "@/lib/http/product"
export const Route = createFileRoute("/products")({
component: ProductsPage,
})
function ProductsPage() {
const [queryOptions, controller] = useTanstackQuery({
key: ["products"],
fetcher: fetchProducts,
})
const { data, isLoading, error } = useQuery(queryOptions)
if (isLoading) return <p>Loading…</p>
if (error) return <p>Failed to load</p>
return (
<div>
<button onClick={() => controller.abort()}>Cancel request</button>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
)
}
use-tanstack-query可统一错误处理、重试策略与缓存键格式,建议在项目中建立标准化的 Query factory。
状态管理与动效
zustand:参阅 Zustand Item 文档,在src/stores中维护轻量状态,与 TanStack Router 结合可实现全局会话、偏好设置等逻辑。motion:在src/components/motion中封装动画组件,配合 TanStack Router 的TransitionAPI 实现页面切换效果。
Schema 校验与类型推导
- 使用
zod定义表单、接口与配置 Schema,与make-api-request结合自动推导类型。 - 在 Loader 与 Action 中引入 Schema 校验,可减少客户端与服务端代码重复。
工程化与质量保障
- 使用
@biomejs/biome统一 Lint 与格式化,参阅 Biome Item 文档。 - 建议在
package.json中配置bun run lint、bun run format,并在 Vitepre-commit或 CI/CD 流程中执行。 - Vite 插件生态可按需引入(如
vite-tsconfig-paths、@tanstack/router-vite-plugin),保持项目结构清晰。
部署与运维建议
- 托管平台:TanStack Start 支持在 Netlify、Vercel、Cloudflare Workers 等平台部署。参考官方部署指南配置构建命令与输出目录,确保 SSR/Edge 功能与缓存策略正常工作。
- 容器化(Dockerize):自托管时可使用多阶段 Dockerfile 打包 Vite/TanStack Start 应用,流程与 Next.js 类似:
- 使用 Node 18+/Bun 基础镜像;
- 安装依赖并执行
vite build或tanstack dev build; - 将输出的
.output(或自定义 SSR 产物)复制到运行镜像; - 配置运行脚本为
node .output/server/index.mjs或bun .output/server/index.mjs。
具体 Dockerfile 可结合团队模板或 Registry Item 扩展,本节留作后续补充实际示例。
Checklist
- 已应用 SSP Theme 并验证明暗主题切换。
- 常用 UI、Block、Hook、Item 能力已通过 Registry 引入。
-
make-api-request+use-tanstack-query建立标准数据访问层。 - 国际化策略(如
react-i18next)已完成配置并通过官方示例验证。 - Biome 与 Zod 校验纳入 CI/CD 流程。
- Page Transition、重点交互已使用
motion定义动效。 - 目标平台部署验证通过,并评估容器化部署方案。
完成以上步骤后,即可获得一套高性能、可扩展、同时具备主题与国际化能力的 Vite + TanStack 工程栈,为各类客户端驱动的业务场景提供扎实基座。