跳至主要内容

Deno vs Node.js:新手也看得懂的完整比較

先從頭說起:什麼是 Node.js?

在講 Deno 之前,我們先快速認識一下 Node.js。

你應該知道 JavaScript 原本只能在「瀏覽器」裡跑,也就是說,它只能在 Chrome、Firefox 這類網頁瀏覽器裡執行。後來,Ryan Dahl 在 2009 年把瀏覽器的 JavaScript 引擎(V8)拆出來,讓 JavaScript 可以直接在電腦上跑,這個東西就叫做 Node.js

從此,前端工程師可以用熟悉的 JavaScript 來寫「後端」程式(像是 API 伺服器、處理資料庫等),省去另外學 PHP、Python 的功夫。這是一個大革命!


那 Deno 又是什麼?

有趣的是,Deno 的作者也是 Ryan Dahl——就是發明 Node.js 的那個人!

2018 年,Ryan 在一場演講中公開說:「Node.js 有 10 個我後悔的設計錯誤」。他發現 Node.js 在設計上有一些當年沒想清楚的問題,但因為 Node.js 已經被全世界幾百萬人在用,不可能直接改掉,所以他乾脆重新做了一個更好的版本,這就是 Deno(發音:dee-no)。

小知識:Deno 其實就是把 Node 的字母重新排列組合而來——N-O-D-E → D-E-N-O。


兩者最大的差異,白話解說

1. 安全性:Deno 預設「不相信你的程式碼」

Node.js 的做法: 你的程式可以隨意讀取電腦上的檔案、連到任何網路、執行任何系統指令。這很方便,但也很危險——萬一你裝了一個有惡意的套件,它可以直接偷你的資料。

Deno 的做法: Deno 預設什麼都不給你做。你的程式想要讀檔案?要先跟 Deno 申請授權。想連網路?也要申請。就像手機 App 要求你「允許存取相機」一樣,你可以選擇拒絕。

# Deno 執行時,要明確告訴它開放哪些權限
deno run --allow-read --allow-net 你的程式.ts

2. 套件管理:不再需要 npm 和 node_modules

這可能是前端工程師最有感的差異!

Node.js 的做法(你一定遇過):

  • 需要安裝 npm(套件管理工具)
  • 執行 npm install,然後電腦裡多出一個超肥大的 node_modules 資料夾
  • 那個資料夾大到讓工程師之間流傳一個笑話:「宇宙中最重的東西是 node_modules」

Deno 的做法: Deno 直接用「網址」來引入套件,不需要安裝,也沒有 node_modules。

// Deno 的引入方式,直接從網址載入
import { serve } from "https://deno.land/std/http/server.ts";

第一次執行時 Deno 會下載並快取起來,之後就不用重複下載了。整個專案的目錄乾乾淨淨。


3. TypeScript 支援:Deno 原生支援,不用額外設定

Node.js 的做法: Node.js 只看得懂 JavaScript,不認識 TypeScript。要用 TypeScript,你必須另外安裝工具(像是 ts-node 或設定 webpack/vite),光是設定就可能搞半天。

Deno 的做法: Deno 直接可以執行 .ts TypeScript 檔案,不需要任何額外設定。對前端工程師來說,這非常省事。


4. 瀏覽器相容性:Deno 更接近瀏覽器標準

Node.js 有些 API 的寫法和瀏覽器不太一樣(這正是 Ryan 後悔的地方之一)。

Deno 則盡量跟瀏覽器的標準保持一致。比方說,fetch(用來打 API 的函數)在瀏覽器、Deno 裡的用法幾乎一樣,但在早期 Node.js 裡需要另外安裝套件才有。


快速比較表

項目Node.jsDeno
誕生年份2009 年2020 年
語言支援JavaScript(TypeScript 要另外設定)JavaScript + TypeScript 原生支援
套件管理npm、需要 node_modules直接用 URL 引入,無 node_modules
安全性預設可以做任何事預設沙盒模式,需明確授權
生態系(套件數量)非常龐大(幾百萬個套件)較少,但持續成長
瀏覽器 API 相容性部分不同高度一致
企業採用程度極高,市場主流持續增加中

那我應該學哪一個?

如果你是剛開始學後端: 建議先從 Node.js 開始。原因很簡單——它的資料、教學、套件生態系都更龐大,遇到問題更容易找到解答,工作機會也更多。

如果你已經有 Node.js 基礎,想接觸新技術: 可以開始玩玩 Deno!特別是 Deno 近年推出了 Deno Deploy(類似 Vercel 的部署服務),對前端工程師相當友善,很值得試試看。

結論: Deno 設計上確實比 Node.js 更現代、更安全,但 Node.js 靠著十幾年的生態系累積,依然是業界主流。兩者並不是誰取代誰的關係,而是各有其適用場景。


延伸閱讀