边缘函数

使用 Deno 2

关于 Deno 2 运行时您需要了解的一切


什么是 Deno 2?

Deno 2 是为 Supabase 边缘函数提供支持的 Deno 运行时的重大升级版本。它在保持 Deno 核心原则(安全性、简洁性和开发者体验)的同时,重点关注可扩展性和生态系统兼容性。

主要改进包括

  • Node.js 和 npm 兼容性:显著提升对 npm 包和 Node.js 代码的支持
  • 更优的依赖管理:新增 deno installdeno adddeno remove 等工具简化包管理
  • 性能提升:优化运行时执行和启动时间
  • 工作区和单体仓库支持:更好地处理复杂项目结构
  • 框架兼容性:支持 Next.js、SvelteKit、Remix 等流行框架
  • 完整 package.json 支持:与现有 Node.js 项目和 npm 工作空间无缝协作

虽然这些改进令人振奋,但也带来了一些可能影响现有函数的变化。我们将在一段时间内继续支持 Deno 1.x 函数,但建议在未来几个月内迁移至 Deno 2 以确保功能持续可用。

如何使用 Deno 2

Deno 2 即将成为创建新函数的默认选择。目前,Deno 2 以预览模式提供,可用于本地开发。

以下是使用 Deno 2 构建和部署函数的方法:

  • 在您的机器上安装 Deno 2.1或更高版本

  • 进入您的 Supabase 项目目录:cd my-supabase-project

  • 打开 supabase/config.toml 文件并设置 deno_version = 2

1
2
[edge_runtime]deno_version = 2
  • 您现有的所有函数应能像之前一样正常工作。

要创建一个新的 Deno 2 项目函数:

1
deno init --serve hello-world
  • 打开 supabase/config.toml 文件并添加以下内容:
1
2
[functions.hello-world]entrypoint = "./functions/hello-world/main.ts"
  • 打开 supabase/functions/hello-world/main.ts 文件,将第 10 行修改为:
1
if (url.pathname === "/hello-world") {

如何将现有函数从 Deno 1 迁移到 Deno 2

完整迁移指南请参阅 官方 Deno 1.x 到 2.x 迁移指南

大多数 Deno 1 边缘函数可以直接兼容 Deno 2,无需任何操作。当我们升级托管运行时环境时,您的函数将自动部署到 Deno 2 集群上。

但对于少量函数,可能会破坏现有功能。

最常见需要注意的问题是某些 Deno 1 API 调用与 Deno 2 运行时存在兼容性问题。

例如,如果您正在使用:

  • Deno.Closer

请改用标准库中的 Closer

1
2
3
4
5
+ import type { Closer } from "jsr:@std/io/types";- function foo(closer: Deno.Closer) {+ function foo(closer: Closer) { // ...}

验证 API 是否更新的最佳方式是使用 Deno lint 工具,它包含 禁止使用废弃 API 的规则

1
deno lint

完整 API 变更列表请参阅 官方 Deno 2 变更清单