关于 tanstack-start-conventions
为使用 TanStack Start 构建或重构应用的团队提供约定指南,按任务组织参考内容,并规定服务端边界、服务端函数和 SSR 做法。使用时需要配合 tanstack-router-conventions 技能。
主要功能
- 01按任务分类的参考指南
- 02客户端与服务端边界规则
- 03服务端函数约定
- 04路由 SSR 指南
- 05API 路由验证规则
适用场景
- 01搭建或重构应用目录
- 02确定服务端代码的放置位置
- 03实现经过验证的服务端函数
- 04配置路由渲染行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ fixmyberlin/ fixmyskills --skill tanstack-start-conventions安装后在 Claude Code 中输入/tanstack-start-conventions确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/app-structure.mdclient-server-boundaries.mdexecution-model.mdlocal-runtime.mdparams-search-api-routes.mdselective-ssr.mdserver-components.mdserver-functions.md详细介绍
TanStack Start 约定
本组织中 TanStack Start 应用的技术栈约定。需要使用 skill tanstack-router-conventions(搜索参数、美观 URL、loader + Query、表单与 useMutation、类型安全的 Router TS、开发工具)——此处不重复说明。身份验证和会话布局请搭配使用 tanstack-start-auth。
应阅读的参考文档
| 任务 | 文件 |
|---|---|
搭建或重构 app/src 文件夹、精简路由、Layout/Page 命名、测试 | app-structure.md |
在 .server.ts / .functions.ts 之间拆分代码、导入保护、beforeLoad 与 loader 的取舍、错误日志记录 | client-server-boundaries.md |
编写 createServerFn、验证、表单提交、失效处理 | server-functions.md |
| Loader 或组件访问 DB/fs/机密信息、客户端导航问题 | execution-model.md |
设置路由 ssr、调试 SSR / hydration、Query 脱水 | selective-ssr.md |
routes/api/ 下的 API 路由(路径参数、搜索参数、POST 请求体) | params-search-api-routes.md |
实验性 RSC(renderServerComponent、createCompositeComponent) | server-components.md |
为 Vite + Nitro 脚本使用 bun --bun | local-runtime.md |
身份验证流程:skill tanstack-start-auth。
不可妥协的规则
| 主题 | 规则 |
|---|---|
| 仅限服务端的模块 | *.server.ts - 绝不能由路由/组件导入(例外:routes/api/ 和没有组件的仅处理器路由);在其中使用 createServerOnlyFn |
| 可从客户端调用 | 使用 createServerFn 的 *.functions.ts;导出名称以 *Fn 结尾 |
| 公开的服务端函数 | public*.functions.ts - 不使用全局身份验证中间件;在 .server.ts 中进行速率限制/令牌检查(参见 tanstack-start-auth) |
| API 路由文件 | 路由文件上不加 server-only 导入标记;将仅限服务端的逻辑放在处理器内,或放在经过树摇优化的导入中 |
| API 搜索参数 | API 路由不使用 validateSearch;在 GET 中从 request.url 使用 Zod safeParse,失败时返回 400 JSON |
| SSR | 每个路由都要显式设置 ssr;UI 默认值为 true;仅处理器 API 路由设为 false;地图密集型 UI 设为 'data-only' |
| 本地 Bun 运行时 | Vite dev 和 Nitro start/preview 使用 bun --bun |
| 路由器搜索 / Query | 由 tanstack-router-conventions 负责(parseSearch / stringifySearch、loader + Query) |
快速决策
beforeLoad与loader: 在beforeLoad中处理重定向、身份验证和轻量级上下文(而非中间件);在loader中获取数据 / 预热 Query。beforeLoad会在每次导航时重新运行,包括搜索参数变更,因此对于高频路由(地图视口、图层切换),应将重定向/身份验证/区域逻辑放在loader中,并将这些参数排除在loaderDeps之外。详情:client-server-boundaries.md。- Loader 与 Query、表单与 mutation: 遵循
tanstack-router-conventions->references/router-and-query.md(#client-mutations)。在 Start 中,loader 和mutationFn会调用*Fn;服务端 I/O 始终通过createServerFn进行。 ssr: 需要服务端身份验证/数据的地图/画布密集型 UI ->'data-only';仅处理器 API(server.handlers)->false;完全以客户端为先的 UI 路由 ->false(少见)。- 服务端组件: 选择启用的实验性功能,不是默认的 FMC 数据路径。
相关技能
| 主题 | 技能 |
|---|---|
| 路由器(必需) | tanstack-router-conventions |
| 身份验证 / 会话 | tanstack-start-auth |
| Bun 安装 / nvm | tech-stack -> bun-install |
| Zustand | zustand-state-management |
| 不使用 TanStack Router 的 URL 状态 | nuqs |
| 重构后残留代码的放置位置 | unslop-code Phase 6 -> references/component-location.md |
评论
支持 Markdown