文档迁移

Node 迁移常见问题

排查模块解析、CommonJS、原生扩展、权限与测试差异

Cannot find module

先执行 deno install。如果依赖由 package.json 声明但工具需要实体目录,选择 nodeModulesDir: "auto" 或保留 manual 模式,不要盲目复制依赖。

deno info src/main.ts
deno check src/main.ts

require is not defined

优先把自有代码改成 ESM。必须保留 CommonJS 时使用 .cjs,或让最近的 package.json 声明 "type": "commonjs"。不要用全局伪造的 require 隐藏模块边界。

npm 包能解析但运行失败

检查顺序:

  1. 是否依赖 Node-API 原生扩展;
  2. 是否要求 install/postinstall script;
  3. 是否假定存在可写 node_modules
  4. 是否读取未授权环境变量、证书或配置文件;
  5. 是否依赖尚未实现的 Node API 行为。

测试在 Node 通过、Deno 失败

先保留原测试 runner,在 Deno 下执行它;不要同时迁移到 Deno.test。重点检查全局对象、fake timers、snapshot 路径、环境变量和临时目录。建立兼容基线后,再逐个测试文件转换。

PermissionDenied

这是缺权限的证据,不是让你直接加 -A 的理由。用 DENO_TRACE_PERMISSIONS=1 或 permission audit 找到资源,再授权具体 host、变量、命令或目录。

完整运行时错误见常见错误,官方参考:Node compatibilityMigrating from Node

输入关键词搜索全部文档。