Deno

> Deno — 一个更现代、更安全的 JavaScript/TypeScript 运行时,用 Rust 重写并解决 Node 的历史包袱。 兄弟们,今天不聊框架,不聊 CSS,咱们来聊聊一个让我从“Node 真香”变成“Node 真香,但 Deno 更香”的工具——**Deno**。 如果你是个前端或者后端工程师,你大概率听过 Node.js。它统治了 JavaScript 服务端十几年,但它的“原罪”也伴随了十几年:回调地狱(现在有 Promise 了,但历史模块还是乱)、npm 依赖地狱、权限控制全靠自觉(一个 `npm install` 就能让你的服务器裸奔)、以及 TypeScript 支持得扭扭捏捏。这些痛点,Deno 全都想干掉。 **Deno 是干什么的?** 一句话:它是 Node.js 的“精神继承者”,但由 Rust 编写,底层用 V8 引擎(就是 Chrome 那个),内置 TypeScript 支持,默认安全(没有网络、文件访问权限,你得显式授权),并且把模块化从 `node_modules` 的“黑洞”变成了 URL 直接引用。它解决的核心问题就是:**让 JavaScript 服务端开发更安全、更简洁、更现代化,同时摆脱 npm 的臃肿和 Node 的历史包袱。** **下载方式** 别去 npm 装(虽然也能装,但没必要),直接去官网下二进制文件,或者用包管理器。 [官网下载地址](https://deno.com/) [GitHub Releases](https://github.com/denoland/deno/releases) **安装方法** 我推荐两种最爽的方式: **macOS / Linux(用 Homebrew)** ```bash brew install deno ``` **Windows(用 winget 或者 choco)** ```bash winget install DenoLand.Deno # 或者 choco install deno ``` 装完验证一下: ```bash deno --version ``` 看到版本号就 OK 了。 --- **基础使用教程(5分钟上手)** **1. 直接跑一个 TS 文件** Deno 原生支持 TypeScript,不需要 `tsc` 编译,不需要 `ts-node`。写个 `hello.ts`: ```typescript // hello.ts const greeting: string = "Hello, Deno!"; console.log(greeting); ``` 然后运行: ```bash deno run hello.ts ``` 就是这么简单。没有 `package.json`,没有 `node_modules`。 **2. 权限控制(这是灵魂)** Deno 默认是“沙箱”模式。如果你代码里要访问网络,直接 `run` 会报错。比如: ```typescript // fetch.ts const res = await fetch("https://api.github.com"); console.log(res.status); ``` 运行 `deno run fetch.ts` 会提示你缺少网络权限。你需要显式授权: ```bash deno run --allow-net fetch.ts ``` 常用权限: - `--allow-net`:网络访问 - `--allow-read`:读文件 - `--allow-write`:写文件 - `--allow-env`:环境变量 - `--allow-all`:全开(不推荐,除非你信任脚本) 这个设计太香了,你跑第三方脚本的时候再也不用担心它偷偷删你磁盘了。 **3. 引入模块(用 URL 而不是 npm)** Deno 里没有 `require`,没有 `import from 'lodash'`。你直接写: ```typescript import { serve } from "https://deno.land/std@0.224.0/http/server.ts"; serve((_req) => new Response("Hello, Deno!")); ``` 运行: ```bash deno run --allow-net server.ts ``` 看到没?依赖是直接写 URL 的,第一次运行会下载并缓存到本地(默认缓存到 `~/.cache/deno`),之后离线也能用。没有 `node_modules` 的深渊,没有 `npm install` 的等待。版本号直接写在 URL 里,清晰明了。 **4. 内置工具链** Deno 自带一堆实用命令,不用再装一堆第三方 CLI: - `deno fmt`:自动格式化代码(类似 Prettier) - `deno lint`:代码检查(类似 ESLint) - `deno test`:测试跑起来 - `deno compile`:把你的 TS 文件编译成独立的可执行文件(跨平台,支持 macOS/Linux/Windows) 比如 `deno compile hello.ts` 会生成一个原生二进制文件,直接分发,不需要目标机器装 Deno。 --- **进阶技巧(老鸟必看)** **1. 使用 `deno.json` 配置项目** 虽然 Deno 不需要 `package.json`,但你可以用 `deno.json` 管理依赖和配置: ```json { "imports": { "std/": "https://deno.land/std@0.224.0/" }, "tasks": { "dev": "deno run --allow-net --watch main.ts" } } ``` 然后 `deno task dev` 就能跑起来了。`--watch` 是热重载,改代码自动重启。 **2. 权限细化到文件级别** `--allow-read` 可以指定具体目录: ```bash deno run --allow-read=/etc,/var/log your_script.ts ``` 只给最小必要权限,安全第一。 **3. 用 `deno install` 安装全局工具** 比如你想装一个 Deno 写的 CLI 工具: ```bash deno install -g https://deno.land/x/deno_std/example.ts ``` 类似 npm 的 `-g`,全局可用。 **4. 配合 Docker 使用** Deno 官方有轻量镜像,比如 `denoland/deno:alpine`,镜像大小只有几十 MB,比 Node 的几百 MB 轻多了。部署的时候直接用 `deno compile` 生成二进制扔进 alpine 容器,爽飞。 **5. 注意:Deno 不是 Node 的替代品(至少现在不是)** 虽然 Deno 能兼容部分 npm 包(通过 `npm:` 前缀),但生态还远不如 Node。如果你要用 Express、Koa、NestJS 这些,还是老老实实用 Node。但如果你写新项目,尤其是工具脚本、API 服务、或者想体验现代 JS 开发流程,Deno 绝对值得一试。 --- **最后说点真心话** Deno 不是“未来”,它已经是“现在”了。它解决了 Node 最烦人的几个点:权限、模块管理、TypeScript 支持、工具链整合。虽然它还不够完美(比如 npm 兼容性一般,有些库用不了),但作为技术博主,我强烈建议你花 30 分钟试试它。你会发现,原来 JavaScript 服务端开发可以这么干净。 别怕折腾,装一个,跑个 `hello world`,感受一下 `--allow-net` 的“被信任感”。相信我,你会回来给我点赞的。 --- **标签**:开发工具 / 运行时 / Node / 跨平台 **分类**:开发工具 (完)