跳到主要内容
Void
新中文文档已上线,翻译自官方指南

全栈开发,
类型不断链。

Void 是运行在 Cloudflare Workers 之上、由 Vite 驱动的全栈框架。 用 React、Vue、Svelte 或 Solid 构建界面,在同一个项目里编写服务端代码:路由、数据访问与部署连成一条线,类型从数据库查询一路贯穿到 UI。

bun add -D void && bunx void init
类型管道0 处手动标注
db/schema.ts真相来源
// db/schema.ts · 类型的唯一来源
export const users = sqliteTable('users', {
  id: integer('id').primaryKey({ autoIncrement: true }),
  name: text('name').notNull(),
  email: text('email').notNull().unique(),
});
类型流经处理器
GETroutes/api/users.ts
// routes/api/users.ts → GET /api/users
export const GET = defineHandler(() => db.select().from(users));
//                       ↑ 返回类型由 schema 推断
客户端自动获得类型
pages/dashboard/index.tsxclient
// pages/dashboard/index.tsx
const users = await fetch('/api/users');
//    ^ { id: number; name: string; email: string }[]

文件即约定,资源即代码

SDK 的各项功能都是可选且可组合的。你可以从一个 API 开始,也可以直接构建完整的全栈应用。

文件即路由

在 routes/下新建一个文件即可添加端点,导出你想支持的方法。动态段用方括号,catch-all 用省略号,括号目录是路由组,不改变 URL,只整理文件。

routes/
├── api/
│   ├── hello.ts        → /api/hello
│   └── users/
│       ├── index.ts    → /api/users
│       └── [id].ts     → /api/users/:id
└── search/
    └── [...query].ts   → /api/search/*

类型管道

处理器推断响应类型,类型化 fetch 检查它们的调用方。改动一个字段,TypeScript 立刻指出应用里需要跟着改的地方。

  • 数据库列的类型在编译期即已知
  • 处理器返回类型生成 .void/ 路由表
  • 客户端的路径、方法、请求体与响应全部受检
await fetch('/api/users');
//    ^ { id, name, email }[]

资源即代码

导入即启用。开发时 Void 提供本地资源,部署时自动开通真实的 Cloudflare 资源,不需要手写 wrangler 配置。

import { db } from 'void/db';
import { kv } from 'void/kv';
import { ai } from 'void/ai';
// 部署时自动开通资源

本地即生产

Vite 使用 Cloudflare 的运行时在本地运行你的应用。本地看到的行为,就是边缘节点上的行为。

$ npm run dev
  ➜ Local: localhost:5173
  ➜ workerd ready in 41ms

页面与表单

loader 读取数据成为带类型的 props,action 处理表单与其他变更,然后更新页面,不需要手写 API 再对接客户端状态。

// users/index.server.ts
const loader = defineHandler(
  () => db.select().from(users)
);

部署到自己的账户,或团队平台

两种目标使用完全相同的应用 API。选择自托管的 Void 平台,可以获得共享访问控制、保留的部署历史与后台管理。

Cloudflare

--platform cloudflare

部署到你自己的 Cloudflare 账户。适合个人项目、独立产品,以及希望完全掌控账户与账单的场景。

$ void connect --platform cloudflare
$ void deploy
  • 资源直接开通在你的账户中
  • 支持自定义应用域名
  • 日志使用 Cloudflare 实时 tail

Void 平台

--platform void

团队

在你的 Cloudflare 账户中安装一套共享环境,供团队或客户使用。开发者连接它的 URL、登录,然后部署自己的应用。

$ void connect platform.example.com
$ void deploy --platform void --project my-app
  • 访问控制、资源限额与用量统计
  • 保留的部署历史与平台日志
  • 关联应用可请求用户授权部署
能力Cloudflare核心自托管平台
静态站点、SPA 与原生页面 SSR
路由规则、WebSocket、队列、Cron 与 ISR
D1、KV、R2 与经 Hyperdrive 的外部 SQL
Workers AI 与第三方模型请求你的账户与网关安装方网关与代理
运行时日志Cloudflare 实时 tail保留的平台日志
应用回滚Worker 版本保留的平台部署记录
带类型的 Durable State 与原生 Durable Objects
沙箱需要 Workers Paid 与 Docker需要平台账户为 Workers Paid
自定义应用域名核心安装不包含
用户后台与托管的 GitHub 构建不需要标准安装不包含

团队平台需要 Workers for Platforms 与相应的基础设施;具体功能取决于安装时的配置。阅读平台安装指南 →

开始构建

三条命令,
把应用部署到边缘。

在一个空目录中运行安装与初始化命令,选择你的 UI 框架与部署目标,然后执行npx void deploy,Void 会构建应用、开通资源、执行迁移,并打印出你的部署地址。

bun add -D void && bunx void init