Deno中如何使用 Node 模塊?

發(fā)布時(shí)間:2024-01-19
盡管方法不是很好,但有時(shí)別無(wú)選擇。
deno 是基于 web 技術(shù)的服務(wù)器端代碼執(zhí)行環(huán)境。
node 使用 javascript 與 commonjs 模塊,并把 npm/yarn 作為其包管理器?!疽曨l教程推薦:node js教程 】deno 使用 typescript 或 javascript, 以及現(xiàn)代的 javascript 導(dǎo)入語(yǔ)句。它不需要包管理器。
想要導(dǎo)入 deno 中的模塊,應(yīng)該通過(guò) url 引用:
import { serve } from "https://deno.land/std/http/server.ts";你可以在 deno 標(biāo)準(zhǔn)庫(kù) 或 deno 第三方模塊列表中找到更多需要的模塊,但是它們并不能滿足你所需要的一切。有時(shí)只能使用依賴 npm 生態(tài)所提供的模塊。下面是從最方便到最繁瑣的一些方法:
1. 如果模塊使用了 es 模塊的 import/export 語(yǔ)法。
你在 deno 中所使用的庫(kù)不一定要來(lái)自推薦的 deno 包,它們可以來(lái)自任何 url,只要它們用了 import 語(yǔ)法即可。通過(guò) unpkg 直接從 npm 存儲(chǔ)庫(kù)內(nèi)部訪問(wèn)這些文件不失為一個(gè)好方法。
import throttle from https://unpkg.com/lodash@4.17.19/throttle.js2. 如果模塊本身沒(méi)有使用 imports,但源代碼用到了
如果是通過(guò) npm 編譯的模塊,或使用了錯(cuò)誤格式的模塊,那么是否使用其源代碼可能需要一些運(yùn)氣。許多流行庫(kù)的源代碼已經(jīng)從 commonjs 遷移到了符合標(biāo)準(zhǔn)的 es 模塊的 import 語(yǔ)法。
一些軟件包有單獨(dú)的 src/ 和 dist/ 目錄,其中 es 模塊風(fēng)格的代碼位于 src/ 中,但 npm 中并未將其包含在軟件包中。在這種情況下,你可以直接從源進(jìn)行導(dǎo)入。
import throttle from "https://raw.githubusercontent.com/lodash/lodash/master/throttle.js";可以通過(guò)單擊 github 上的 “raw” 按鈕得到這個(gè) url,進(jìn)而獲取原始的 js 文件。使用 github cdn 或查看文件是否可以通過(guò) github 頁(yè)面進(jìn)行訪問(wèn),這樣更直接,但卻是可行的。
特別注意: 一些庫(kù)將 es 模塊與 webpack 一起使用,或者使用模塊加載器,使它們可以從 node 模塊中導(dǎo)入,如下所示:
//不好的用法:import { somefunction } from "modulename";import { someotherfunction } from "modulename/file.js";標(biāo)準(zhǔn)的導(dǎo)入方法是,要以 ./ 開(kāi)頭或者是一個(gè)可以正常工作的 url:
//標(biāo)準(zhǔn)的用法:import { someotherfunction } from "./folder/file.js";不過(guò)你也可以嘗試下一種方法:
3. 導(dǎo)入 commonjs 模塊
幸運(yùn)的是,有一個(gè)名為 jspm 的服務(wù),它能夠解析第三方模塊并對(duì) commonjs 模塊進(jìn)行編譯來(lái)用作 es 模塊導(dǎo)入。該工具可用于在瀏覽器中使用 node 模塊,而無(wú)需構(gòu)建步驟。但是我們也可以在這里用到它。
在我最近的項(xiàng)目中,想進(jìn)行推送通知,其中涉及生成 vapid 的憑據(jù),有一個(gè)可以加密的 deno 密碼庫(kù),但是整個(gè)開(kāi)發(fā)過(guò)程很困難,我寧愿使用流行的 web-push 庫(kù)??梢杂?jspm cdn 和如下 url 進(jìn)行導(dǎo)入:
import webpush from "https://dev.jspm.io/web-push";這樣可以在 deno 中向像使用其他任何模塊一樣去使用它。
使 typescript 類型能夠正常工作
在 deno 中使用 typecipt 有一個(gè)不錯(cuò)的功能,就是很容易能夠?yàn)槟K提供了非常完美的自動(dòng)補(bǔ)全功能。如果編輯器的 deno 擴(kuò)展知道類型定義,它甚至可以自動(dòng)補(bǔ)全第三方模塊。
盡管這對(duì)代碼是否能夠正常工作不是必要的,但是可以幫你很好的維護(hù)代碼。
在我導(dǎo)入另一個(gè)名為 fast-xml-parser 的模塊時(shí),我注意到它有一個(gè)類型定義文件是以 .d.ts 結(jié)尾的。這些文件描述了各種接口,甚至適用于 javascript.js 文件。有時(shí)你還可以在 @types\\\\somemodule 存儲(chǔ)庫(kù)中找到類型定義文件。
例如:https://github.com/definitely…
通過(guò)這個(gè)文件 typescript 可以自動(dòng)完成從 javascript 文件導(dǎo)入的內(nèi)容。即使對(duì)于用 jspm 導(dǎo)入的文件也是如此:
// 導(dǎo)入 fast-xml-parser 庫(kù)import fastxmlparser from "https://dev.jspm.io/fast-xml-parser";// 從 fast-xml-parser 的源代碼導(dǎo)入類型定義文件import * as fastxmlparser from "https://raw.githubusercontent.com/naturalintelligence/fast-xml-parser/master/src/parser.d.ts";//將 parser 與以下類型一起使用const parser = fastxmlparser as typeof fastxmlparser;我從定義文件中將類型定義導(dǎo)入為 fastxmlparser(請(qǐng)注意是大寫的 f),它不包含任何有效代碼,但這是一個(gè)與我們要導(dǎo)入的代碼具有相同類型的對(duì)象。
我從 jspm 中將代碼導(dǎo)入為 fastxmlparser(小寫字母 f),這是有效的代碼,但沒(méi)有類型。
接下來(lái),把它們組合在一起來(lái)創(chuàng)建 parser,即 fastxmlparser 類型的 fastxmlparser 。
最后希望你能嘗試一下deno。deno 能夠使用任何一種用于 web 甚至是用于 node/npm 的模塊,確實(shí)為這個(gè)新的服務(wù)器端庫(kù)生態(tài)奠定了良好的基礎(chǔ)。
更多編程相關(guān)知識(shí),可訪問(wèn):編程教學(xué)?。?
上一個(gè):熔體流動(dòng)速率儀產(chǎn)品說(shuō)明、熔融指數(shù)測(cè)定儀性能、熔融指數(shù)儀廠家
下一個(gè):原料皮帶運(yùn)輸機(jī)控制電路PLC編程實(shí)例

RC1218FK-0788R7L,1218 88.7Ω 1.0%電阻
合同不蓋騎縫章的有效嗎?
建設(shè)工程施工合同的承包方是否必須是法人
三星CL03A104MQ3NNPC貼片電容參數(shù)與應(yīng)用
小米怎么建文件夾,小米手機(jī)怎么建立文件夾
三千主機(jī)(3000左右裝機(jī)清單)
經(jīng)緯網(wǎng)
常見(jiàn)基坑支護(hù)類型解析之——基坑內(nèi)支撐
cad批量轉(zhuǎn)pdf快捷鍵(cad批量轉(zhuǎn)pdf的插件怎樣使用)
電腦硬盤編號(hào),windows下查看硬盤上所有分編號(hào)
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos