Deno 的 ES 模块的使用

什么是 Deno

Deno 是由 Node.js 的创始人 Ryan Dahl 所开发的一个新的运行时环境,它的目标是成为一个安全、稳定、可靠的 JavaScript/TypeScript 运行时环境。

Deno 是使用 Rust 和 V8 引擎编写的,并且支持 ES6+ 和 TypeScript 语法。Deno 它提供了一个强大的标准库,包含了许多常见的开发工具和库,例如文件 I/O、HTTP、WebSocket 等等。同时,Deno 还支持 REPL(Read-Eval-Print-Loop)模式,这使得编写和测试 JavaScript 和 TypeScript 代码变得更加便利。

什么是 ES 模块

ES(ECMAScript)模块是 ECMAScript 2015 标准之后引入的一种模块化机制,它可以使开发人员将代码分成可重用的模块,然后在应用程序中按需使用。ES 模块可以在浏览器、Node.js 和现代 JavaScript 运行时环境中运行。

ES 模块定义了一组新的关键字 importexport

// profile.js
export const name = 'John Doe';
export function logGreeting() {
    console.log(`Hello, ${name}!`);
}

// main.js
import { name, logGreeting } from './profile.js';
console.log(name); // John Doe
logGreeting(); // Hello, John Doe!

在 Deno 中使用 ES 模块

Deno 默认禁止了任何网络操作,因此从外部导入 ES 模块时,需要加上 --allow-net 标志才能联网获取模块。

import { serve } from "https://deno.land/std@0.102.0/http/server.ts";

const server = serve({ port: 8000 });

console.log("http://localhost:8000/");

for await (const req of server) {
  req.respond({ body: "Hello World\n" });
}

上述代码导入了 Deno 的标准库中的 http/server.ts 模块,并启动了一个简单的 HTTP 服务器。需要注意的是,这里导入的模块使用了完整的 URL 地址,包括了模块的版本号。这是因为在 Deno 中,模块的导入是通过 URL 地址进行的,如果你想使用某个版本的模块,就在 URL 地址中指定版本号即可。这个特性极大地方便了 Deno 开发者在代码之间共享模块。

本地模块和第三方模块

与 Node.js 不同的是,Deno 不同的是,它没有 Node.js 中的模块管理器(NPM)。模块在 Deno 中是通过 URL 进行导入的。

由于没有模块管理器,因此在 Deno 中使用第三方模块需要进行版本管理,并将依赖项显式地提到代码中。有几种方法可以实现版本管理和依赖管理:

方式一:使用 URL 地址

Deno 的模块导入是通过 URL 地址进行的,因此可以直接使用 URL 地址导入第三方模块。例如:

import { superagent } from "https://cdn.jsdelivr.net/npm/superagent";
const res = await superagent.get("https://www.taobao.com");
console.log(res.text);

这里我们导入了第三方库 superagent

在实际项目中,通常会使用某个版本的库,因此最好指定具体的版本号进行导入,例如:

import { superagent } from "https://cdn.jsdelivr.net/npm/superagent@6.1.0";

方式二:使用标准库中的第三方模块

Deno 提供了许多常见的第三方库的封装,开发者可以在 deno.land/std 中找到它们。与使用 Deno 标准库中的其他模块一样,你可以在你的代码中直接导入这些库,例如:

import { serveStatic } from "https://deno.land/std/http/file_server.ts";

这里我们导入了 serveStatic,它是一个静态服务器。

方式三:使用 Deno 配置文件

Deno 支持编写一个名为 deno.json 的配置文件来管理依赖。

{
  "imports": {
    "superagent": "https://cdn.jsdelivr.net/npm/superagent@6.1.0"
  }
}

在此配置文件中指定了你使用的第三方模块及其版本号,这样在代码中导入模块时,就可以将其视为本地模块进行导入,例如:

import { superagent } from "superagent";
const res = await superagent.get("https://www.taobao.com");
console.log(res.text);

这里我们导入了 "https://cdn.jsdelivr.net/npm/superagent@6.1.0",但在代码中使用时却只需要写 "superagent"

总结

Deno 是一个新的 JavaScript/TypeScript 运行时环境,它提供了许多 Node.js 中没有的特性,例如默认支持 ES 模块,相比 Node.js 更加安全和稳定等等。在 Deno 中使用 ES 模块需要注意:导入模块需要加上 --allow-net 标志进行联网,同时,由于没有模块管理器,因此需要显式地管理依赖项。最后需要注意的是,Deno 的标准库中包含了很多常见的第三方库的封装,可以直接使用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b0b7d6add4f0e0ffa11168