Deno中使用节点模块的方法

  介绍

这篇文章将为大家详细讲解有关Deno中使用节点模块的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

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

    <李>节点使用JavaScript与commonjs模块,并把npm/纱作为其包管理器。 <李> Deno使用打印稿或JavaScript,以及现代的JavaScript导入语句。它不需要包管理器。

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

从“进口{}服务https://deno.land/std/http/server.ts";

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

1。如果模块使用了ES模块的导入/导出语法。

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

从https://unpkg.com/lodash@4.17.19进口节流throttle.js

2。如果模块本身没有使用进口,但源代码用到了

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

一些软件包有单独的<代码> src/和<代码> dist/目录,其中ES模块风格的代码位于<代码> src/> 从“进口节流阀;https://raw.githubusercontent.com/lodash/lodash/master/throttle.js";

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

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

//不好的用法:   从“进口{someFunction} modulename";   从“进口{someOtherFunction} modulename/file.js";

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

//标准的用法:   从“进口{someOtherFunction}/文件夹/file.js";

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

3。导入commonjs模块

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

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

从“进口webPush https://dev.jspm.io/web-push";

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

使打印稿类型能够正常工作

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

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

在我导入另一个名为fast-xml-parser的模块时,我注意到它有一个类型定义文件是以<代码> .d。ts> @types \ somemodule>

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

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

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

我从定义文件中将类型定义导入为

Deno中使用节点模块的方法