Node之父ry釋出新專案deno:下一代Node

astaxie發表於2018-05-31

> 近日,Node 之父 Ryan Dahl 釋出新的開源專案 deno,從官方介紹來看,可以認為它是下一代 Node,使用 Go 語言代替 C++ 重新編寫跨平臺底層核心驅動,上層仍然使用 V8 引擎,最終提供一個安全的 TypeScript 執行時。

它的特性包括:

  • 支援 TypeScript 2.8 開箱即用;
  • 無 package.json,無 npm,不追求相容 Node;
  • 通過 URL 方式引入依賴而非通過本地模組,並在第一次執行的時候進行載入和快取,並僅在程式碼使用--reload 執行,依賴才會更新,引入方式如:
import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts"
import { log } from "./util.ts"
  • 可以控制檔案系統和網路訪問許可權以執行沙盒程式碼,預設訪問只讀檔案系統可訪問,無網路許可權。V8 和 Golang 之間的訪問只能通過 protobuf 中定義的序列化訊息完成;
  • 發生未捕捉錯誤時自動終止執行;
  • 支援 top-level 的 await;
  • 最終建立單一可執行檔案;
  • 目標是相容瀏覽器;
  • 可以作為庫引入,用於建立自己的 JavaScript runtime。

這幾個特性,有好幾個都是針對目前 Node 的痛點而來的,包括無 package.json、依賴的引入和更新方式,針對的就是被廣泛吐槽的過大的 node_modules。

同時,不追求相容 node,可以視為 ry 想徹底拋棄 node 包袱,打造一個更好的 JS 執行時。

作者在 GitHub Issue 回覆開發者的幾個問題:

> deno 和 Node 的區別是什麼?

ry 開玩笑稱,目前兩者最大的區別是 Node 大行其道,而 Deno 尚未投入使用。

從更高層面上來說,Deno 儘可能簡化 V8 與系統 API 的耦合,並打造更加簡單、穩定的模組系統,以及一個安全的沙箱執行環境。

再者,使用 Golang 而不是 C++ 作為底層語言,這樣,新增高階功能時會比在 Node 中更加容易,比如在 Go 中新增 http2.0 支援,只需新增一些路由 API 和一些配置到 protobuf 中。

Deno 誕生的目的,是為了建立更簡單和安全的非瀏覽器 runtime,它在這個時候出現,是因為現在的開發工具比 2009 年更好。

我們還可以認為 Deno 將是目前 Node 生態一些難解問題的終極答案,比如依賴管理、安全性、穩定性、橫向擴充套件等等。

Deno 的誕生,將啟發更多人投入到下一代 Node 的探索當中,這比之前 Node 的一些分叉更具備創新和革命性。

目前 Deno 正在緊張開發當中,我們也將持續關注它的進展。

Deno Github 地址: https://github.com/ry/deno

更多原創文章乾貨分享,請關注公眾號
  • Node之父ry釋出新專案deno:下一代Node
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章