Back

Val Town:浏览器中的无服务器 JavaScript

Val Town:浏览器中的无服务器 JavaScript

如果你曾经需要一个快速的 webhook 端点、一个定时数据抓取任务,或者一个轻量级 API——但又不想启动服务器、配置 IAM 角色或接触部署流水线——Val Town 正是为这种场景而生的。

Val Town 是一个基于浏览器的平台,用于编写和部署无服务器 JavaScript 和 TypeScript。你在浏览器中编写代码,代码在云端的托管 Deno 运行时上执行。你的代码永远不会在最终用户的浏览器中执行——这是一个重要的区别。浏览器只是编辑器。执行发生在服务器端,在一个完全由 Val Town 管理的沙箱 Deno 环境中。

核心要点

  • Val Town 是一个基于浏览器的平台,用于在托管的 Deno 运行时上编写和部署无服务器 JavaScript/TypeScript
  • 代码被组织成 vals——版本化的、可即时部署的单元,通过 HTTP 请求、cron 调度或传入的电子邮件触发
  • 内置服务如 SQLite、blob 存储、电子邮件和 OpenAI 客户端,在小型项目中无需外部基础设施
  • Val Town 非常适合轻量级 API、webhooks、定时任务和粘合代码,但不适合长时间运行或计算密集型的工作负载

什么是 Val?Val Town 无服务器 JavaScript 的核心单元

Val Town 中的所有内容都围绕 vals 组织——版本化的、可部署的代码单元。可以把 val 看作一个小型的、自包含的函数或服务。每个 val 都会被存储、版本化,并在你保存的那一刻立即部署。

Vals 支持三种触发类型:

  • HTTP:响应 Web 请求。你的 val 接收一个 Request 对象并返回一个 Response——标准的 Fetch API 语义,对于使用过 Cloudflare Workers 的人来说很熟悉。
  • Cron:使用 cron 语法或简单的基于间隔的调度按计划运行。适用于定期任务,如发送报告或同步数据。
  • Email:当 Val Town 地址收到电子邮件时触发。适合构建轻量级的电子邮件驱动自动化。

Val Town Deno 运行时:你实际运行的环境

Val Town 使用 Deno 作为其运行时,而不是 Node.js。这在实践中很重要。你通过 URL 或 npm: 说明符导入模块,而不是使用 package.json。许多 Node.js 特定的 API(fspath)行为不同或不可用。

优势:Deno 的权限模型和模块系统非常适合沙箱化的多租户环境。权衡:一些依赖 Node 内部机制的 npm 包在没有调整的情况下无法工作。

用于轻量级后端开发的内置能力

Val Town 包含一个托管服务的标准库,因此你无需为常见需求连接外部基础设施:

  • SQLite — 每个 val 的持久化结构化数据存储。适用于小型数据集、计数器和状态。
  • Blob Storage — 存储和检索任意数据:JSON 文件、图像、文本。
  • Email — 通过单个函数调用直接从 val 发送电子邮件。
  • OpenAI — 预配置的 OpenAI 客户端,无需在代码中管理 API 密钥即可使用。

这里有一个最小的 HTTP val 来说明这种模式:

export default async function handler(req: Request): Promise<Response> {
  const data = { message: "Hello from Val Town", timestamp: Date.now() }
  return new Response(JSON.stringify(data), {
    headers: { "Content-Type": "application/json" },
  })
}

保存它,它就会立即在公共 URL 上生效。无需构建步骤,无需部署命令。

何时使用 Val Town——何时不使用

Val Town 非常适合以下场景:

  • 无需基础设施设置的快速无服务器 API 或 webhook 接收器
  • 按 cron 调度运行的定时任务
  • 连接第三方服务的粘合代码
  • 后端逻辑的快速原型开发

它不太适合:

  • 长时间运行的进程(有执行时间限制)
  • 重计算工作负载
  • 需要带有原生绑定的 Node.js 特定包的应用程序
  • 复杂的多服务架构,在这种情况下完整平台(AWS、GCP)更有意义

本地开发和工具

基于浏览器的开发很方便,但 Val Town 也支持本地工作流。Val Town CLI 允许你从终端编辑和部署 vals。还有一个用于 LLM 辅助开发的 MCP 指南,以及一个用于通过 REST API 进行编程访问的 JavaScript SDK

结论

Val Town 占据了一个特定而有用的细分市场:用于小型服务、自动化和 API 的基于浏览器的无服务器开发。它几乎消除了前端开发人员经常需要的轻量级后端任务的所有部署摩擦。如果你的用例符合其执行模型和 Deno 运行时,它是从想法到运行端点的最快方式之一。

常见问题

可以,但有一些注意事项。Val Town 运行在 Deno 上,因此你使用 npm: 说明符语法导入 npm 包,而不是通过 package.json 安装它们。大多数纯 JavaScript npm 包都能正常工作。但是,依赖 Node.js 内部机制或原生 C++ 绑定的包可能无法在沙箱 Deno 环境中正常运行。

Val Town 提供有限制的免费层级。例如,向外部收件人发送电子邮件和更高的使用限制是为付费计划保留的。付费计划可提供更高的限制、更长的执行时间以及私有 vals 等附加功能。请查看 Val Town 定价页面了解当前计划限制和费用的详细信息。

Val Town 提供了一个内置的密钥管理器,你可以在其中存储 API 密钥和敏感值。这些密钥可以通过 Deno.env.get 或 process.env 在你的 vals 中作为环境变量访问,从而将凭据排除在源代码之外。密钥的作用域限定在你的账户,其他用户无法看到。

Val Town 施加的执行时间限制因计划而异。免费层级的 vals 通常有较短的超时窗口,而付费计划提供延长的执行时间。这些限制使 Val Town 不适合长时间运行的后台进程,但对于 API 处理程序、定时任务和快速自动化来说完全足够。

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay