SuperAPI AI 工具集

deno

编程与开发

查看项目

更新于 10-15 11:00

技能介绍

Deno 是一个安全的 TypeScript/JavaScript 运行时,内置完整工具链。它无需 node_modules、打包器配置或 tsconfig.json,TypeScript 原生运行,所有 API 基于 Web 标准(fetch、Request、Response、Web Streams)。

用途

Deno 用于运行 TypeScript/JavaScript 代码,适合需要安全沙箱、零配置 TypeScript、Web 标准 API 或边缘部署的场景。它提供从开发、测试、格式化、检查到编译为独立二进制的完整工作流。

主要能力

命令行工具

Deno 提供丰富的 CLI 命令:

  • deno run server.ts:运行文件
  • deno run --watch server.ts:文件变更时重启
  • deno task dev:运行 deno.json 中的任务
  • deno test:运行测试
  • deno bench:运行基准测试
  • deno fmt:格式化代码
  • deno lint:检查代码
  • deno check server.ts:仅类型检查不运行
  • deno compile --output myapp server.ts:编译为独立二进制
  • deno serve server.ts:运行 HTTP 服务器(导出默认处理器)
  • deno doc mod.ts:生成文档
  • deno info server.ts:显示依赖树
  • deno repl:交互式 REPL
  • deno upgrade:升级 Deno 自身

权限模型

Deno 默认安全,脚本没有文件、网络或环境访问权限,除非显式授予。

  • deno run --allow-read server.ts:允许所有文件读取
  • deno run --allow-read=/tmp,./data server.ts:仅允许特定路径
  • deno run --allow-write=./output server.ts:允许写入特定目录
  • deno run --allow-net server.ts:允许所有网络访问
  • deno run --allow-net=api.example.com server.ts:仅允许特定主机
  • deno run --allow-env=DATABASE_URL,PORT server.ts:仅允许特定环境变量
  • deno run --allow-run=git,deno server.ts:仅允许特定子进程
  • deno run --allow-ffi server.ts:允许外部函数接口
  • deno run --allow-sys server.ts:允许系统信息(操作系统、内存)
  • deno run -A server.ts:允许所有(仅限开发)
  • deno run --deny-net server.ts:显式拒绝网络

提示模式:不带标志时,Deno 在运行时交互式询问。使用 --no-prompt 静默拒绝所有未授权访问。

deno.json 配置

deno.json 支持 tasks、imports、compilerOptions、fmt、lint、exclude、lock、nodeModulesDir 等字段。imports 字段替代 import maps,所有裸说明符通过它解析。运行 deno add @std/path 可自动添加条目。

标准库(@std)

所有模块位于 JSR 上的 @std 下,通过 deno add @std/<module> 添加。涵盖文件 I/O(@std/fs、@std/path)、HTTP(@std/http/file-server)、测试断言(@std/assert)、文本编码(@std/encoding/base64)、日期时间(@std/datetime)、集合(@std/collections)、异步工具(@std/async)、流(@std/streams)等。

npm 和 Node.js 兼容性

使用 npm: 说明符导入任意 npm 包,无需安装步骤。Node 内置模块通过 node: 前缀使用。在 deno.json 中设置 "nodeModulesDir": "auto" 可满足需要磁盘上 node_modules 的包(原生插件、期望该目录的框架)。

JSR(JavaScript Registry)

JSR 是 TypeScript 优先的注册表,包可在 Deno、Node 和 Bun 中工作。使用 deno add @std/path 或 deno add @oak/oak 添加包。发布使用 deno publish,预览使用 deno publish --dry-run。JSR 要求显式类型导出,公共 API 签名中不允许 any。

HTTP 服务器

Deno.serve(推荐)接受端口和请求处理器,返回 Response。deno serve 支持多 worker,导出默认对象含 fetch 处理器,使用 deno serve --parallel server.ts 多核运行。中间件模式通过组合函数实现日志、CORS 等。

Deno KV

内置键值存储,本地(SQLite 支持)和 Deno Deploy(全球分布)均可用。支持 CRUD、前缀列表、原子操作(乐观并发)、入队(内置队列)、监听变更。

Deno Deploy

无服务器边缘平台,在 35+ 区域运行 Deno 代码。支持 Deno KV、BroadcastChannel、cron。使用 deployctl 部署:deployctl deploy --project=my-app server.ts。支持 Deno.serve、Deno.openKv()、Deno.cron()、BroadcastChannel、Web 标准 API、npm 包。

Fresh 框架

Deno 的全栈 Web 框架,采用 Islands 架构:默认零 JS 发送,交互组件按需水合。使用 deno run -A -r https://fresh.deno.dev my-app 脚手架项目。基于文件的路由,支持 Handler 和 Island 组件。

测试

内置测试运行器,支持基本测试、异步测试、BDD 风格(describe/it/beforeEach/afterEach)、模拟(stub、spy、assertSpyCalls)、假时间(FakeTime)。命令包括 deno test、deno test --filter、deno test --coverage、deno coverage、deno test --doc。

FFI(外部函数接口)

通过 Deno.dlopen 调用原生 C/Rust 库。需要 --allow-ffi 或 -A。支持类型:i8、i16、i32、i64、u8、u16、u32、u64、f32、f64、pointer、buffer、void。

WebSocket 和 WebWorker

支持 WebSocket 服务器(Deno.upgradeWebSocket)和 Web Worker(new Worker)。

从 Node.js 迁移

迁移步骤包括:将 package.json 脚本重命名为 deno.json 任务;将裸导入替换为 npm: 说明符或 JSR 包;为 Node 内置导入添加 node: 前缀;为运行命令添加权限标志;将 __dirname 替换为 import.meta.dirname;将 __filename 替换为 import.meta.filename;将 require() 替换为 import;如包期望 node_modules 则设置 "nodeModulesDir": "auto"。

使用方式

安装 Deno 后,可直接运行 TypeScript 文件,无需额外配置。通过 deno.json 管理任务、导入和编译选项。使用权限标志控制脚本访问。通过 deno add 添加依赖,通过 deno publish 发布包。

适用场景

  • 需要安全沙箱的脚本执行
  • 零配置 TypeScript 项目
  • 使用 Web 标准 API 的服务端开发
  • 边缘部署(Deno Deploy)
  • 全栈 Web 应用(Fresh)
  • 需要内置测试、格式化、检查工具的项目
  • 从 Node.js 迁移的项目

限制

资料中未提供 Deno 的具体版本要求、性能基准数据、收费或价格信息、平台支持细节(除 Deno Deploy 的 35+ 区域外)、与其他运行时的详细对比数据(除提供的对比表外)。部分功能(如 FFI、Deno KV 远程连接)需要特定权限或配置。