什么是 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 模块定义了一组新的关键字 import
和 export
。
// 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