深剖:JavaScript開發人員更喜歡Deno的原因

何爲Deno?

  • Deno 是一個 JavaScript/TypeScript 的運行時,默認使用安全環境執行代碼,有着卓越的開發體驗。
  • Deno 建立在 V8、Rust 和 Tokio 的基礎上。
    在這裏插入圖片描述
    NodeJS 的創造人 Ryan Dahl 剛發佈了一個新的運行時 Deno,旨在解決 Node 存在的許多缺陷。像大家一樣,我一開始也以爲這只是又一個 JS 框架。但是深入瞭解過 Deno 的各項優點之後,我意識到了 Deno 正是 2020 年的今天,後端 Javascript 開發人員所需要的東西。

現代化的 Javascript:ES 模塊

在這裏插入圖片描述
如果你也像我一樣是一位 React 開發人員,你會注意到使用 NodeJS 導入軟件包的語法是不一樣的。這是因爲 Node 面世於 2009 年,這些年來 Javascript 得到了大量更新和改進。

在 React( Deno)中,我們使用 import package from 'package’語法,而在 Node 中我們使用 const package = require(“package”) 語法。

Deno 的 ES 模塊 import 有兩個優勢:

  1. 通過 import,你可以有選擇地從包中加載所需的部件,從而節約了內存空間。
  2. 加載與 require 是 同步 的,而 import 則會 異步 加載模塊,從而提高了性能。

去中心化包

Deno 不使用 npm,而是使用 URL 或文件路徑引用模塊。

是的,不再需要 package.json。每個包都是從一個 URL 加載的。

在 NodeJS 中,要使用一個軟件包,你必須先從 NPM 安裝它:

npm i moment

等它安裝完畢後,再將其包含在你的應用中:

const moment = require("moment")

而在 Deno 中,這個第三方模塊通過 URL 導入。所以要使用 moment 時,只需導入 https://deno.land/x/moment/moment.ts 即可。

在這裏插入圖片描述
Deno 中軟件包這塊的另一大優勢是,每個包安裝完成後都緩存在硬盤驅動器上。也就是說軟件包的安裝過程只運行一次。要在任何地方再次導入依賴項時,並不需要重新下載。

TypeScript 原生支持,無需配置

在這裏插入圖片描述
在 NodeJS 中使用 TypeScript 需要很多準備工作。你必須安裝 typescript,更新 package.json、tsconfig.json,並確保你的模塊支持 @types。

tsconfig.json:
{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react"
  },
  "include": ["src"]
}

在 Deno 中,你要做的就是將文件另存爲.ts 而不是.js,TypeScript 編譯器已經準備就緒了。

頂級 await:在異步函數外使用 await

在這裏插入圖片描述
在 Node 中,我們只能在一個異步函數中訪問 await 關鍵字。

而在 Deno 中,你可以隨時隨地 await 任何事情,而無需將其包裝在一個異步函數中。

幾乎所有的 Javascript 應用都包含許多異步函數。這一改進讓代碼變得更加簡潔明瞭。

訪問Browser API(Window,Fetch)

要使用 Javascript 發出 HTTP 請求,我們可以使用 Fetch API。

在 NodeJS 中我們沒有訪問 Browser API 的權限,因此我們不能直接調用一個 fetch 函數。我們必須先安裝這個包:npm i node-fetch

然後導入它:

const fetch = require("node-fetch")

這樣我們才能調用一個 fetch。

Deno 原生支持訪問 window 對象,於是你可以調用 :fetch(“https://something.com”) 以及 Browser API 中的其他任意內容,而無需安裝任何庫。

有了這個頂級 await 的優勢,Deno 的代碼就會比 Node 簡單很多:
在這裏插入圖片描述
Deno 還有其他許多優點,例如默認情況下更安全、可以執行 Wasm 二進制文件、擁有許多內置庫,等等。

Deno 最終會取代 Node 嗎?也許會吧。這可能需要幾年時間。NodeJS 生態系統非常龐大,Deno 可能需要一些時間才能迎頭趕上。很多 Javascript 開發人員最近都考慮在新項目中使用 Deno,因此如果你近期想要開始做一個新項目,Deno 絕對值得你研究一下。瞭解更多信息,請訪問:https://deno.land/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章