使用 Deno 2
关于 Deno 2 运行时您需要了解的一切
此功能目前处于公开Alpha测试阶段。如遇任何问题,请提交支持工单。
什么是 Deno 2?
Deno 2 是为 Supabase 边缘函数提供支持的 Deno 运行时的重大升级版本。它在保持 Deno 核心原则(安全性、简洁性和开发者体验)的同时,重点关注可扩展性和生态系统兼容性。
主要改进包括
- Node.js 和 npm 兼容性:显著提升对 npm 包和 Node.js 代码的支持
- 更优的依赖管理:新增
deno install
、deno add
和deno 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
12[edge_runtime]deno_version = 2
- 您现有的所有函数应能像之前一样正常工作。
要创建一个新的 Deno 2 项目函数:
1deno init --serve hello-world
- 打开
supabase/config.toml
文件并添加以下内容:
12[functions.hello-world]entrypoint = "./functions/hello-world/main.ts"
- 打开 supabase/functions/hello-world/main.ts 文件,将第 10 行修改为:
1if (url.pathname === "/hello-world") {
-
使用
npx supabase@beta functions serve --no-verify-jwt
启动开发服务器 -
要运行内置测试,执行:
cd supabase/functions/hello-world; deno test
如何将现有函数从 Deno 1 迁移到 Deno 2
完整迁移指南请参阅 官方 Deno 1.x 到 2.x 迁移指南。
大多数 Deno 1 边缘函数可以直接兼容 Deno 2,无需任何操作。当我们升级托管运行时环境时,您的函数将自动部署到 Deno 2 集群上。
但对于少量函数,可能会破坏现有功能。
最常见需要注意的问题是某些 Deno 1 API 调用与 Deno 2 运行时存在兼容性问题。
例如,如果您正在使用:
Deno.Closer
请改用标准库中的 Closer
。
12345+ import type { Closer } from "jsr:@std/io/types";- function foo(closer: Deno.Closer) {+ function foo(closer: Closer) { // ...}
验证 API 是否更新的最佳方式是使用 Deno lint 工具,它包含 禁止使用废弃 API 的规则。
1deno lint
完整 API 变更列表请参阅 官方 Deno 2 变更清单。