何爲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 有兩個優勢:
- 通過 import,你可以有選擇地從包中加載所需的部件,從而節約了內存空間。
- 加載與 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/