Deno 是一个现代化的 JavaScript 和 TypeScript 运行时,旨在改善和替代 Node.js。由 Node.js 的创建者 Ryan Dahl 在 2018 年推出,Deno 关注安全性、模块化和高性能等方面,旨在为开发者提供一个更好的运行环境。
Deno 的特点
-
安全性:Deno 默认运行在安全模式下,只有明确授予的权限才能访问文件系统、网络和环境变量。这一特性显著降低了应用程序遭受攻击的风险。
-
TypeScript 支持:Deno 原生支持 TypeScript,无需额外配置。开发者可以直接运行
.ts
文件,Deno 会在后台进行编译。 -
模块系统:Deno 采用 URL 作为模块的路径,这意味着开发者可以直接从网络加载模块,不再需要 npm。Deno 也具有内置的包管理功能,开发者可以使用任何有效的 URL 加载模块。
-
单一可执行文件:Deno 的安装非常简单,用户只需下载一个二进制文件即可,无需安装其他依赖或包管理工具。
基本用法
下面是一些 Deno 的基础用法示例。
运行 TypeScript 文件
首先,我们需要安装 Deno(以 macOS 为例):
curl -fsSL https://deno.land/x/install/install.sh | sh
然后我们可以创建一个简单的 TypeScript 文件 hello.ts
:
// hello.ts
const greeting: string = "Hello, Deno!";
console.log(greeting);
通过 Deno 运行该文件:
deno run hello.ts
输出将显示:
Hello, Deno!
授予权限
假设我们想要读取一个文件的内容,Deno 会因为安全原因而拒绝访问,除非我们明确授予权限。创建一个名为 read_file.ts
的文件:
// read_file.ts
const data = await Deno.readTextFile("example.txt");
console.log(data);
在运行该文件时,我们需要使用 --allow-read
标志来授权读取文件:
deno run --allow-read read_file.ts
使用外部模块
Deno 的模块系统非常灵活。我们可以直接从 URL 加载模块。以下是一个使用第三方模块的示例:
在 app.ts
文件中使用 oak
这个 Koa 风格的框架:
// app.ts
import { Application } from "https://deno.land/x/oak/mod.ts";
const app = new Application();
app.use((ctx) => {
ctx.response.body = "Hello, Deno with Oak!";
});
app.listen({ port: 8000 });
console.log("Server is running on http://localhost:8000");
运行该文件:
deno run --allow-net app.ts
然后在浏览器中访问 http://localhost:8000
,你将看到 "Hello, Deno with Oak!" 的信息。
小结
Deno 提供了许多改进,帮助开发者更轻松地构建现代应用程序。它的安全性、模块化架构以及原生支持 TypeScript 的功能,使得 Deno 成为一个值得尝试的新兴运行时。尽管目前 Deno 还在发展中,但它已经显示出强大的潜力,尤其是在大型项目和复杂应用的开发中。随着社区的不断壮大和更多模块的发布,Deno 将会越来越受欢迎。