# Node 迁移常见问题

## Cannot find module

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

```bash
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、变量、命令或目录。

完整运行时错误见[常见错误](/docs/reference/errors)，官方参考：[Node compatibility](https://docs.deno.com/runtime/fundamentals/node/)、[Migrating from Node](https://docs.deno.com/runtime/migrate/)。
