# 心智模型

## 一张图记住 Deno

```text
源代码 (.ts/.js/.wasm)
  ├─ 模块：本地 / JSR / npm / URL
  ├─ 配置：deno.json(c) + deno.lock
  ├─ 工具：fmt / lint / check / test / doc / compile
  └─ 运行：Web API + Deno API + Node 兼容层
                    ↓
          权限边界 (--allow-* / --deny-*)
                    ↓
          文件、网络、环境变量、子进程、FFI
```

## 与 Node.js 最不同的三点

1. **安全默认值**：敏感 I/O 默认拒绝，权限可以限制到路径、主机或变量名。
2. **TypeScript 直接运行**：执行时会转译但不会自动完成完整类型检查；CI 仍应运行 `deno check`。
3. **一体化工具链**：格式化、Lint、测试和文档生成属于同一版本的 CLI。

## 依赖不等于一种来源

- JSR 包使用 `jsr:`，适合 TypeScript 原生包与 Deno 标准库。
- npm 包使用 `npm:`，Node 内置模块使用 `node:`。
- `deno.json` 的 `imports` 可以把完整 specifier 映射为稳定的裸导入名。
- `deno.lock` 固定解析结果并记录完整性信息，应提交到版本库。

<Callout type="info" title="类型检查边界">
“能运行 `.ts`”不等于“每次运行前都执行完整类型检查”。把 `deno check` 放进 CI，才能把类型错误变成发布门禁。
</Callout>

继续阅读：[权限模型](/docs/core/permissions) 与 [依赖管理](/docs/core/dependencies)。
