91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Deno和Node.js有哪些區別

發布時間:2022-12-02 09:59:23 來源:億速云 閱讀:136 作者:iii 欄目:開發技術

本篇內容介紹了“Deno和Node.js有哪些區別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

什么是Deno,以及它的主要特性是哪些?

Deno是基于Google V8引擎構建的安全的TypeScript運行環境。 下面是構建Deno的一些物料:

  • Rust(Deno的核心模塊使用Rust編寫,Node的核心模塊是用C++實現的)

  • Tokio(Rust實現的異步編程框架)

  • TypeScript(Deno對JavaScript和TypeScript都支持開箱即用)

  • V8(Google出品JavaScript運行時,主要用在Chrome和Node中)

接下來看看Deno提供了哪些特性。

安全性(權限管理)

Deno最重要的特性就是安全性。

相較于Node,Deno默認使用沙箱環境執行代碼,這意味著運行環境沒有操作以下模塊權限:

  • 文件系統

  • 網絡

  • 執行其他的腳本

  • 系統環境變量

讓我們瞅一眼Deno的權限系統是如何工作滴。

(async () => {
 const encoder = new TextEncoder();
 const data = encoder.encode('Hello world\n');

 await Deno.writeFile('hello.txt', data);
 await Deno.writeFile('hello2.txt', data);
})();

這個腳本分別創建了兩個名為hello.txthello2.txt的文件,并在其中寫入Hello world。但是這段代碼運行在沙箱環境中,所以是沒有文件系統的操作權限滴。

還有一點值得注意,在上面的腳本中我們使用Deno命名空間來操作文件,而不像在Node中使用fs模塊。Deno命名空間提供了超多基礎方法。不過使用Deno命名空間會導致我們的代碼失去了對瀏覽器的兼容性,這個問題我們晚點再聊。

使用下面的命令執行上述腳本:

$ deno run write-hello.ts

執行之后,我們會收到下面的提示:

Deno requests write access to "/Users/user/folder/hello.txt". Grant? [a/y/n/d (a = allow always, y = allow once, n = deny once, d = deny always)]

實際上,基于上面創建文件的腳本我們會收到兩次來自沙箱環境的權限提示。不過如果我們選擇allow always選項,就只會被詢問一次啦。

如果我們選了deny,會拋出一個PermissionDenied的錯誤,如果我們沒寫錯誤處理邏輯的話,進程在此時就被終止啦。

如果我們用下面的命令來執行腳本:

deno run --allow-write write-hello.ts

會在沒有提示的情況下創建這兩個文件。

Deno針對文件系統的命令行標志位,除了--allow-write,還有--allow-net/--allow-env/--allow-run,分別用來開啟針對網絡、系統環境變量和操作子進程的權限。

模塊機制

Deno使用瀏覽器一樣的方式,通過URL來加載模塊。很多人第一次見到在服務端的import語句中見到URL會感到有點困惑,但對我來說這還蠻好理解的:

import { assertEquals } from "https://deno.land/std/testing/asserts.ts";

你覺得通過URL來引入模塊會有啥大不了的嗎?答案其實蠻簡單的:通過使用URL來加載模塊,Deno就可以避免引入一個類似npm的中心化系統來發布package,npm最近受到了很多吐槽。

通過URL來引入代碼,可以讓包的作者們使用自己最喜愛的方式來維護和發布自己的代碼。再也不會有package.jsonnode_modules了。

當我們啟動應用之后,Deno會下載所有被引用的文件,并將它們緩存到本地。一旦引用被緩存下來,Deno就不會再去下載它們了,除非我們使用-- relaod標志位去觸發重新下載。

還有幾個問題值得我們討論一哈:

萬一存放引用的站點掛了咋辦?

由于沒有了一個中心化的包管理站點,那些存放模塊的站點可能因為各種各樣的原因掛掉。如果在開發甚至生產環境出現這種情況是非常危險滴!

我們在上一節提到,Deno會緩存好已下載的模塊。由于緩存是存放在我們的本地磁盤的,Deno的作者建議將這些緩存提交到代碼倉庫里。這樣一來,即使存放引用的站點掛了,開發者們還是可以使用已經下載好的模塊(只不過版本是被鎖住的啦)。

Deno會把緩存存儲在環境變量$DENO_DIR所指定的目錄下,如果我們不去設置這個變量,它會指向系統默認的緩存目錄。我們可以把$DENO_DIR指定我們的本地倉庫,然后把它們提交到版本管理系統中(比如:git

只能使用URL來引用模塊嗎?

總是敲URL顯得有點XX,還好,Deno提供了兩種方案來避免我們成為XX。

第一種,你可以在本地文件中將已經引用的模塊重新export出來,比如:

export { test, assertEquals } from "https://deno.land/std/testing/mod.ts";

假如上面這個文件叫local-test-utils.ts。現在,如果我們想再次使用test或者assertEquals方法,只需要像下面這樣引用它們:

import { test, assertEquals } from './local-test-utils.ts';

看得出來,是不是通過URL來引用它們并不是最重要的啦。

第二種方案,建一個引用映射表,比如像下面這樣一個JSON文件:

{
   "imports": {
      "http/": "https://deno.land/std/http/"
   }
}

然后把它像這樣import到代碼里:

import { serve } from "http/server.ts";

為了讓它生效,我們還需要通過--importmap標志位讓Deno來引入import映射表:

$ deno run --importmap=import_map.json hello_server.ts

瀏覽器兼容性

Deno有計劃做到兼容瀏覽器。從技術上講,在使用ES module的前提下,我們不需要使用任何類似webpack的打包工具就能在瀏覽器上運行Deno代碼。

不過呢,你可以使用類似Babel這樣的工具可以把代碼轉化成ES5版本的JavaScript,這樣可以兼容那些不支持所有最新語言特性的低版本瀏覽器中,帶來的后果就是最終文件里有很多不是必須的冗余代碼,增大代碼的體積。

結果取決于我們的主要目的是啥。

支持TypeScript開箱即用

不需要任何配置文件就能在Deno中輕易地使用TypeScript。當然咯,你也可以編寫純JavaScript代碼,并使用Deno去執行它。

“Deno和Node.js有哪些區別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

页游| 武定县| 东山县| 安福县| 南宫市| 昔阳县| 吉首市| 昭平县| 离岛区| 赫章县| 宁乡县| 曲沃县| 定州市| 洛宁县| 兴仁县| 福安市| 乌拉特后旗| 彩票| 永康市| 洛隆县| 八宿县| 安康市| 昌图县| 荔浦县| 和政县| 敦煌市| 景谷| 凉山| 尉犁县| 舟曲县| 古蔺县| 万载县| 尼勒克县| 肥城市| 岱山县| 阿图什市| 台山市| 神池县| 台东市| 博野县| 大邑县|