不完全是直接“上传文件”,Cloudflare Worker 的部署和传统服务器不一样,有几个关键点需要理解,尤其是涉及 WASM 模块(比如 Go 编译的 .wasm 文件)。我给你梳理清楚整个流程:
⸻
1️⃣ Worker 的部署方式
Cloudflare Worker 有几种常用部署方式:
1. 通过 Web UI
• 在 Cloudflare 仪表盘 → Workers → 创建 Worker
• 可以直接在在线编辑器里写 JS 代码
• 适合简单脚本,但上传 WASM 不能直接拖文件放进去
2. 通过 Wrangler CLI(推荐)
• Wrangler 是 Cloudflare 官方提供的工具,用于本地开发、构建和部署 Worker
• 可以把 JS + WASM 模块一起打包上传
⸻
2️⃣ 如何上传 Go WASM 文件
Cloudflare Worker 并不能像传统服务器那样直接访问文件系统。你必须通过 Worker 项目打包 的方式上传:
a. 安装 Wrangler
npm install -g wrangler
wrangler login
b. 初始化项目
wrangler generate my-worker
cd my-worker
c. 项目结构示例
my-worker/
│
├─ package.json
├─ wrangler.toml
├─ worker.js # Worker 主入口
├─ main.wasm # Go 编译后的 WASM
└─ index.html # 可选,静态前端
d. 在 Worker 中引用 WASM
import wasmModule from './main.wasm'
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(req) {
const { instance } = await WebAssembly.instantiate(wasmModule)
// 这里根据 Go 暴露的接口调用
return new Response("Hello from WASM!", {
headers: { "content-type": "text/plain" }
})
}
注意:在 Wrangler 项目里,WASM 文件通过 import 或 bindings 的方式打包到 Worker。
e. wrangler.toml 配置 WASM
name = "go-wasm-worker"
main = "worker.js"
compatibility_date = "2025-12-12"
[[wasm_modules]]
name = "main"
path = "./main.wasm"
• 这样 Wrangler 知道要把 main.wasm 打包到 Worker
⸻
3️⃣ 部署到 Cloudflare
wrangler publish
• 这个命令会打包 JS + WASM 上传到 Cloudflare Worker
• Worker 会有自己的 URL,例如:
https://go-wasm-worker.your-subdomain.workers.dev
⸻
4️⃣ 前端访问
• 前端页面 fetch('https://go-wasm-worker.your-subdomain.workers.dev')
• 就能拿到 Go WASM 返回的数据
⸻
✅ 总结
• 不能直接拖 .wasm 文件到 Worker UI,需要通过 Wrangler 打包 上传
• Wrangler 会把 JS + WASM 打包成单个 Worker
• 前端通过 HTTP 请求调用 Worker API
• Cloudflare 提供全球 CDN 加速、免维护服务器
⸻
如果你愿意,我可以帮你画一张 完整 Go WASM + Worker + 前端的部署架构图,让你一眼就看懂整个流程。
你希望我画吗?