Deno - 新一代 JavaScript 和 TypeScript 運行環境

    前言

    Deno 是一個新興的 JavaScript 和 TypeScript 運行環境,於西元 2020 年五月宣布 1.0 版本的到來。本文會對 Deno 做一個簡要的介紹,讓讀者了解這個軟體專案。

    Deno 的由來

    Deno 的創造者 Ryan Dahl,同時也是 Node.js 的創造者,在西元 2018 年的一場演講中提到了 Node.js 的根本設計缺陷,並發佈了 Deno。由於相容性的考量,直接修改 Node.js 是不實際的,所以才會有這個新專案。

    之後,Ryan Dahl 在其他演講中繼續推廣 Deno。對 Deno 有興趣的讀者,可以花一些時間自行把這兩場演講聽完。

    Deno 使用的核心技術

    Deno 本身使用到下列技術:

    由於 V8 和 TypeScript 都是直接用上游專案,而非自己重造輪子,可以確保語言相容性。雖然 Deno 官網中有提到官方版本的 TypeScript 的速度太慢,想要自行以 Rust 重製,但筆者不希望 Deno 官方團隊真的那麼做,否則又得學一套不完全相容的 TypeScript 了。

    原本 Deno 是以 Golang 實作,但要處理兩個垃圾回收器太麻煩了,所以改用無垃圾回收機制的 Rust 來寫 Deno 的核心。但 Deno 在設計上仍可看到向 Golang 致敬的部分。

    Deno 不是 Node.js

    由於 Deno 的目標是改良 Node.js 的設計缺陷,所以 Deno 不相容於 Node.js。以下是一些 Deno 的特性:

    • 使用 ES Module 而非 CommonJS 處理模組
    • 不需要 NPM
    • 沒有集中軟體庫 (central repository)
    • 直接透過 URL 取得社群函式庫
    • 直接支援 TypeScript,不需加入額外配置
    • 內建 promise 及 async/await 的支援
    • 內建沙盒 (sandbox) 模式
    • 重新設計核心 API,不相容於 Node.js
    • 更貼近瀏覽器的 API

    但考量到廣大的 Node.js 使用者的需求,Deno 仍然有實作 Node.js 相容層,只是這個相容層還不是很完善。

    Deno 的特性穩定嗎?

    由於 Deno 是新興專案,所以得考量該專案的穩定度。在筆者寫這篇文章的時候,Deno 已經來到 1.0 版,這代表 Deno 命名空間下的 API 是穩定的。但 Deno 本身仍有一些不穩定的特性。官網會註明那些特性尚未穩定。此外, Deno 標準函式庫還不穩定,目前和 Deno 主程式使用不同的版本號。

    Deno 程式的用途?

    目前 Deno 可用來撰寫命令列程式 (console application)、網頁後端程式 (web backend)、網頁客戶端程式 (HTTP client)。但 Deno 和原生 Node.js 差不多,API 相對低階,有函式庫輔助會比較容易撰寫應用程式。目前 Deno 的函式庫數量不多,這是因為 Deno 算是年輕的專案,而且還沒有大型科技公司在實務上使用該專案。

    雖然 Deno 的 API 刻意和瀏覽器相容,而且 Deno 官網有展示一些寫網頁前端程式 (web frontend) 的範例程式碼。但目前相關的開發工具還沒到位,所以用 Deno 寫網頁前端程式沒有特別的好處。目前來說,還是用原生 TypeScript 或 Babel 來寫網頁前端程式比較好。

    此外,已經有熱心開發者寫出以 WebView 為基礎的桌面 GUI 程式了。希望日後有更多 Deno 相關的應用。

    用 Deno 將 JavaScript 編譯成執行檔?

    目前來說,Deno 暫時無法把 JavaScript 或 TypeScript 編譯成執行檔,不過有考慮加上這項特性。更多細節可參考 GitHub 上的相關 issue

    學習 Deno 的方式

    由於 Deno 沒有創造新的語言,仍然可參考現存的 JavaScript 和 TypeScript 的學習資源來學習 Deno,像是 Mozilla 的 MDN 或是 TypeScript 的官網。Deno 官網上也沒有重寫 JavaScript 和 TypeScript 的語言說明。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Yahoo
    【追蹤本站】
    Facebook Facebook Twitter Plurk