04. Cloudflare 全栈落地:Workers 是运行时,不只是部署按钮

TanStack Start 在 Cloudflare 上的重点不是“能部署”,而是 server functions 能直接进入 Workers 生态:bindings、D1、R2、KV、Queues、Workflows。

官方推荐路径

npm create cloudflare@latest -- my-tanstack-start-app --framework=tanstack-start
npm run dev
npm run deploy

已有项目则安装 Cloudflare Vite plugin 和 Wrangler,并把 Vite 的 SSR environment 接到 Workers runtime。

npm i -D @cloudflare/vite-plugin wrangler
// vite.config.ts
import { defineConfig } from 'vite'
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
import { cloudflare } from '@cloudflare/vite-plugin'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [
    cloudflare({ viteEnvironment: { name: 'ssr' } }),
    tanstackStart(),
    react(),
  ],
})
// wrangler.jsonc
{
  "$schema": "node_modules/wrangler/config-schema.json",
  "name": "my-tanstack-start-app",
  "compatibility_date": "2026-07-07",
  "compatibility_flags": ["nodejs_compat"],
  "main": "@tanstack/react-start/server-entry",
  "observability": { "enabled": true }
}

Bindings 的实践含义

Cloudflare 文档显示,TanStack Start server-side code 可以通过 cloudflare:workersenv 访问 bindings。

import { createServerFn } from '@tanstack/react-start'
import { env } from 'cloudflare:workers'

const getProfile = createServerFn().handler(async () => {
  const row = await env.DB.prepare('select * from profiles where id = ?')
    .bind('me')
    .first()
  return row
})

推荐架构切片

需求TanStack 部分Cloudflare 部分
公开内容页Start prerender/SSRStatic assets + CDN cache
用户 dashboardRouter + Query + server functionsWorkers + D1/KV
文件上传server function mutationR2 binding
后台任务custom server entryQueues / Cron / Workflows
AI 功能server function boundaryWorkers AI / AI Gateway

Cloudflare vs Vercel 的真实差异

实践任务:拿一个你现有 Next 项目的小功能切片,写出 TanStack 版资源图:route → search schema → loaderDeps → server function → Cloudflare binding。不要先迁移全项目。全项目迁移是工程师表达乐观主义的一种轻微疾病。
快速判断

在 Cloudflare Workers 上访问 D1/R2/KV 的关键机制是什么?

推荐原文

Cloudflare TanStack Start GuideCloudflare Vite Plugin