Node API 替换表
在 Node 内置模块、Web API 与 Deno API 之间做可验证的迁移选择
Deno 支持大量 node: API,所以迁移不等于把每个调用都重写。先用兼容 API 跑通,再在能减少依赖或改善可移植性时采用 Web/Deno API。
| Node.js | Deno / Web API | 建议 |
|---|---|---|
fs.promises.readFile(path, "utf8") | Deno.readTextFile(path) | 两者都需要文件权限 |
fs.promises.writeFile | Deno.writeTextFile | 收紧到具体目录 |
http.createServer | Deno.serve | 新 HTTP 服务首选 Web Request/Response |
process.env.NAME | Deno.env.get("NAME") | 只授权指定变量 |
process.argv.slice(2) | Deno.args | CLI 参数可直接迁移 |
child_process.spawn | new Deno.Command() | 需要 --allow-run=<cmd> |
__dirname | new URL(".", import.meta.url) | 保持 URL 语义,必要时转路径 |
crypto.randomUUID() | crypto.randomUUID() | Web API 可直接复用 |
Buffer | Uint8Array / TextEncoder | 协议边界优先 Web 类型 |
一个文件读取示例
// 兼容优先:保留 Node API
import { readFile } from "node:fs/promises";
const a = await readFile("config.json", "utf8");
// Deno-first:更短的文本 API
const b = await Deno.readTextFile("config.json");
两种代码都应以同样的最小权限运行:
deno run --allow-read=config.json main.ts
迁移测试至少覆盖路径、编码、stream/backpressure、信号、超时与错误类型;函数名相似不代表边界行为完全相同。