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 包能解析但运行失败
检查顺序:
- 是否依赖 Node-API 原生扩展;
- 是否要求 install/postinstall script;
- 是否假定存在可写
node_modules; - 是否读取未授权环境变量、证书或配置文件;
- 是否依赖尚未实现的 Node API 行为。
测试在 Node 通过、Deno 失败
先保留原测试 runner,在 Deno 下执行它;不要同时迁移到 Deno.test。重点检查全局对象、fake timers、snapshot 路径、环境变量和临时目录。建立兼容基线后,再逐个测试文件转换。
PermissionDenied
这是缺权限的证据,不是让你直接加 -A 的理由。用 DENO_TRACE_PERMISSIONS=1 或 permission audit 找到资源,再授权具体 host、变量、命令或目录。
完整运行时错误见常见错误,官方参考:Node compatibility、Migrating from Node。