这篇文章将为大家详细讲解有关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/> 代码中,但npm中并未将其包含在软件包中。在这种情况下,你可以直接从源进行导入。
从“进口节流阀;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> 代码结尾的。这些文件描述了各种接口,甚至适用于JavaScript。js文件。有时你还可以在<代码> @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;
我从定义文件中将类型定义导入为