部署
Flue 设计为与 Vite 配合使用。vite dev 在开发期间服务应用,vite build 生成可部署的制品,而发布该制品就像将任何其他 Vite 应用发布到你选择的托管平台一样。
本指南涵盖每个目标的构建和部署路径。要深入了解每个目标的运行时行为,请参阅 Node.js 和 Cloudflare 指南。
使用 Vite 构建
将 @flue/vite 中的 flue() 添加到 vite.config.ts 即可将 Vite 项目变为 Flue 应用:
import { flue } from '@flue/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [flue()],
});import { cloudflare } from '@cloudflare/vite-plugin';
import { flue } from '@flue/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [flue(), cloudflare()],
});该插件在两个目标上完成三项工作:
- 解析项目。 它发现
flue.config.ts并定位你的入口模块(app.ts是必需的;db.ts和cloudflare.ts是可选的)。 - 扫描智能体。 对源码根目录的
'use agent'扫描 定义了应用的智能体集合,生成的服务器引导程序会注册每个扫描到的智能体。 - 转换智能体模块。 构建过程将每个智能体的标识(函数名或其
agentName静态覆盖)作为绑定到函数的字符串字面量打上标记,这样经过压缩的生产包就不会破坏持久标识。
flue() 还接受在 flue.config.ts 之上合并的内联配置——参见配置。
选择目标
Flue 为两个目标构建:
- Node.js 生成一个自启动服务器,你可以在 Node 运行的任何地方运行它:虚拟机、容器或托管主机。
- Cloudflare 生成一个 Worker,其中每个智能体运行在自己的 Durable Object 中,开箱即用地提供持久状态和全局可寻址性。
当 target 未设置时,flue() 从 Vite 插件数组中自动检测:如果 @cloudflare/vite-plugin 存在,则目标为 'cloudflare',否则为 'node'。显式的 target 覆盖自动检测。
在 Node.js 上部署
vite build 将应用打包成两个 Node 入口:自启动的 dist/server.mjs 和它导入的非监听 dist/app.mjs 块:
vite build
node dist/server.mjs
在发布制品之前需要了解三件事:
- 环境: 构建后的服务器不会加载
.env——在启动时提供提供商密钥和其他配置。它默认监听端口3000;设置PORT来更改。 - 依赖: 应用依赖被外部化,而非打包。将制品与其
node_modules一起部署,或在一个先安装它们的容器中部署。 - 状态: 没有
db.ts适配器时,对话保存在进程本地内存中,重启会丢失它们。在部署任何你关心的内容之前,请配置一个持久适配器。
vite preview 在本地以生产行为服务构建后的制品——一个可靠的部署前检查。
有关运行时细节——状态和持久性、进程所有权、多副本规则、环境和密钥——请参阅 Node.js 目标指南。有关分步托管演练,请参阅在 Node.js 上部署智能体、Docker 以及生态系统部分的其他平台指南。
在 Cloudflare 上部署
在 Cloudflare 上,flue() 与官方的 @cloudflare/vite-plugin 协作,后者负责 workerd 开发、构建输出、预览和部署。flue() 必须在插件数组中位于 cloudflare() 之前;顺序错误会被诊断为错误。Flue 的职责是生成 Cloudflare 插件消费的 Worker 输入:一个注册你扫描的智能体并为每个智能体导出一个 Durable Object 类的 Worker 入口,加上你编写的 wrangler.jsonc 与生成的绑定合并。将两个生成的路径添加到 .gitignore:
.flue-vite/
.flue-vite.wrangler.jsonc
在 wrangler.jsonc 中有两件事需要你来编写:nodejs_compat 兼容性标志,以及 Durable Object 迁移——一个你部署的只追加记录,Flue 永远不会写入它。每个部署的智能体都需要为其生成的类添加一个迁移条目,因此添加一个智能体始终是一个三件套:智能体本身、其在 app.ts 中的挂载(仅 dispatch 的智能体可跳过),以及一个新的迁移标签:
{
"name": "my-flue-worker",
"compatibility_date": "2026-06-01",
"compatibility_flags": ["nodejs_compat"],
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["FlueTriageAgent"] }],
}重命名或删除已部署的智能体也是一次存储迁移(renamed_classes / deleted_classes)——在更改任何已部署的内容之前,请阅读管理迁移。
通过 Cloudflare 插件构建和部署:vite build,然后针对它输出到 dist/ 的配置进行部署。有关完整演练,请参阅在 Cloudflare 上部署智能体;有关运行时行为——生成的类和绑定、持久执行、服务绑定——请参阅 Cloudflare 目标指南。
后续步骤
- Node.js 和 Cloudflare ——每个目标的运行时行为详解。
- 在 Node.js 上部署智能体 和 在 Cloudflare 上部署智能体 ——分步演练,加上 Docker 和其他平台。
- 数据库 ——Node 目标的持久对话存储。
- 配置 ——每个
flue.config.ts字段和 Vite 插件的选项。