# Deno 是什么

Deno 是由 Node.js 创始人 Ryan Dahl 发起的开源 JavaScript、TypeScript 与 WebAssembly 运行时。它没有试图发明另一门语言，而是把现代 Web API、安全权限、包管理和工程工具收进一个 CLI。

## 为什么会有 Deno

Node.js 诞生时，CommonJS、npm 和前后端 JavaScript 都还很早期。Deno 重新选择了 ES Modules、URL/注册表依赖、Web 标准 API 和默认隔离，并把格式化、Lint、测试与类型检查做成内置能力。Deno 2 又加强了 Node 与 npm 兼容，因此今天的迁移通常可以渐进完成。

```text
Node.js 项目                    Deno-first 项目
├── package.json                ├── deno.json
├── package-lock.json           ├── deno.lock
├── node_modules                ├── 全局缓存（默认）
├── tsc / eslint / test runner  └── deno fmt / lint / check / test
└── 默认拥有系统访问             └── 默认拒绝敏感系统访问
```

## 应该选哪个运行时

| 场景 | 更自然的选择 | 先核对什么 |
| --- | --- | --- |
| 大量既有 Node 包与团队流程 | Node.js 或渐进采用 Deno | 原生扩展、loader、生命周期脚本 |
| TypeScript API、CLI、自动化 | Deno | 权限清单与 npm 兼容性 |
| 极致启动速度、Bun 专属工具链 | Bun | Node API 与生产平台支持 |
| Cloudflare 原生绑定和全球边缘 | Workers | Node 兼容子集、CPU 与平台限制 |
| Fresh、Deno Deploy、MCP 工具服务 | Deno | 框架和托管平台当前版本 |

<Callout type="info" title="不是“没有配置”">
Deno 提供好用的默认值，但真实项目仍应提交 `deno.json`、`deno.lock`、tasks 和最小权限命令。少配置不等于没有工程约束。
</Callout>

官方参考：[Deno runtime](https://docs.deno.com/runtime/)、[Node and npm compatibility](https://docs.deno.com/runtime/fundamentals/node/)、[Cloudflare Node.js compatibility](https://developers.cloudflare.com/workers/runtime-apis/nodejs/)。
