在Deno中使用 Node 模块

2020/9/2 14:04:43

本文主要是介绍在Deno中使用 Node 模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

尽管方法不是很好,但有时别无选择。

Deno 是基于 Web 技术的服务器端代码执行环境。

  • Node 使用 JavaScript 与 commonjs 模块,并把 npm/yarn 作为其包管理器。
  • Deno 使用 Typescript 或 JavaScript, 以及现代的 javascript 导入语句。它不需要包管理器。

想要导入 deno 中的模块,应该通过 URL 引用:

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

你可以在 Deno 标准库 或 Deno 第三方模块列表中找到更多需要的模块,但是它们并不能满足你所需要的一切。有时只能使用依赖 npm 生态所提供的模块。下面是从最方便到最繁琐的一些方法:

1. 如果模块使用了 ES 模块的 import/export 语法。

你在 deno 中所使用的库不一定要来自推荐的 Deno 包,它们可以来自任何 URL,只要它们用了 import 语法即可。通过 unpkg 直接从 npm 存储库内部访问这些文件不失为一个好方法。

import throttle from https://unpkg.com/lodash@4.17.19/throttle.js

2. 如果模块本身没有使用 imports,但源代码用到了

如果是通过 npm 编译的模块,或使用了错误格式的模块,那么是否使用其源代码可能需要一些运气。许多流行库的源代码已经从 commonjs 迁移到了符合标准的 ES 模块的 import 语法。

一些软件包有单独的 src/dist/ 目录,其中 ES 模块风格的代码位于 src/ 中,但 npm 中并未将其包含在软件包中。在这种情况下,你可以直接从源进行导入。

import throttle from "https://raw.githubusercontent.com/lodash/lodash/master/throttle.js";

可以通过单击 github 上的 “raw” 按钮得到这个 URL,进而获取原始的 JS 文件。使用 github cdn 或查看文件是否可以通过 github 页面进行访问,这样更直接,但却是可行的。

特别注意: 一些库将 ES 模块与 webpack 一起使用,或者使用模块加载器,使它们可以从 Node 模块中导入,如下所示:

//不好的用法:
import { someFunction } from "modulename";
import { someOtherFunction } from "modulename/file.js";

标准的导入方法是,要以 ./ 开头或者是一个可以正常工作的 URL:

//标准的用法:
import { someOtherFunction } from "./folder/file.js";

不过你也可以尝试下一种方法:

3. 导入 commonjs 模块

幸运的是,有一个名为 JSPM 的服务,它能够解析第三方模块并对 commonjs 模块进行编译来用作 ES 模块导入。该工具可用于在浏览器中使用 Node 模块,而无需构建步骤。但是我们也可以在这里用到它。

在我最近的项目中,想进行推送通知,其中涉及生成 VAPID 的凭据,有一个可以加密的 deno 密码库,但是整个开发过程很困难,我宁愿使用流行的 web-push 库。可以用 JSPM CDN 和如下 URL 进行导入:

import webPush from "https://dev.jspm.io/web-push";

这样可以在 deno 中向像使用其他任何模块一样去使用它。

使 Typescript 类型能够正常工作

在 deno 中使用 typecipt 有一个不错的功能,就是很容易能够为模块提供了非常完美的自动补全功能。如果编辑器的 deno 扩展知道类型定义,它甚至可以自动补全第三方模块。

尽管这对代码是否能够正常工作不是必要的,但是可以帮你很好的维护代码。

在我导入另一个名为 fast-xml-parser 的模块时,我注意到它有一个类型定义文件是以 .d.ts 结尾的。这些文件描述了各种接口,甚至适用于 JavaScript.js 文件。有时你还可以在 @types\somemodule 存储库中找到类型定义文件。

例如:https://github.com/Definitely...

通过这个文件 typescript 可以自动完成从 JavaScript 文件导入的内容。即使对于用 JSPM 导入的文件也是如此:

// 导入 fast-xml-parser 库
import fastXMLParser from "https://dev.jspm.io/fast-xml-parser";
// 从 fast-xml-parser 的源代码导入类型定义文件
import * as FastXMLParser from "https://raw.githubusercontent.com/NaturalIntelligence/fast-xml-parser/master/src/parser.d.ts";
//将 parser 与以下类型一起使用
const parser = fastXMLParser as typeof FastXMLParser;

我从定义文件中将类型定义导入为 FastXMLParser(请注意是大写的 F),它不包含任何有效代码,但这是一个与我们要导入的代码具有相同类型的对象。

我从 JSPM 中将代码导入为 fastXMLParser(小写字母 f),这是有效的代码,但没有类型。

接下来,把它们组合在一起来创建 parser,即 FastXMLParser 类型的 fastXMLParser

最后希望你能尝试一下deno。Deno 能够使用任何一种用于 Web 甚至是用于 node/npm 的模块,确实为这个新的服务器端库生态奠定了良好的基础。 🦕

173382ede7319973.gif


本文首发微信公众号:前端先锋

欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章

欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章

欢迎继续阅读本专栏其它高赞文章:

  • 深入理解Shadow DOM v1
  • 一步步教你用 WebVR 实现虚拟现实游戏
  • 13个帮你提高开发效率的现代CSS框架
  • 快速上手BootstrapVue
  • JavaScript引擎是如何工作的?从调用栈到Promise你需要知道的一切
  • WebSocket实战:在 Node 和 React 之间进行实时通信
  • 关于 Git 的 20 个面试题
  • 深入解析 Node.js 的 console.log
  • Node.js 究竟是什么?
  • 30分钟用Node.js构建一个API服务器
  • Javascript的对象拷贝
  • 程序员30岁前月薪达不到30K,该何去何从
  • 14个最好的 JavaScript 数据可视化库
  • 8 个给前端的顶级 VS Code 扩展插件
  • Node.js 多线程完全指南
  • 把HTML转成PDF的4个方案及实现

  • 更多文章...


这篇关于在Deno中使用 Node 模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程