Node.js 全域物件 (Global Objects) 與常規變數

在瀏覽環境中,全域物件是 window;而在 Node.js 中,最頂層的全域物件則被稱為 global。Node.js 提供了許多隨處可用的全域變數與物件,讓我們能直接與進程 (Process) 及硬體環境進行互動,而無需額外載入模組。

global 全域物件

掛載在 global 下的屬性和方法,可以在專案的任何角落直接存取。在現代 JavaScript 中,您也可以使用跨環境的 globalThis 來引用全域物件。

// 不建議的做法:隨意定義全域變數
global.appVersion = '1.0.0';
console.log(appVersion); // 即使在其他模組中也能直接讀取
注意:過度使用 global 會造成「全域污染」,使得程式碼難以讀取與除錯。建議優先使用 module 匯出或依賴注入。

process 進程物件

process 物件是開發 Node.js 應用時最重要的全域變數之一,它提供了目前進程 (Process) 的管理與環境資訊。

常用屬性與方法

  • process.env:獲取環境變數。這對於儲存 API Key、資料庫連線字串等敏感資訊至關重要。
  • process.argv:返回一個陣列,包含啟動 Node.js 進程時傳入的命令行參數。
  • process.cwd():返回目前「工作路徑」(Current Working Directory)。
  • process.exit():立即終止目前的進程。
// 範例:根據環境選擇資料庫
const dbUrl = process.env.NODE_ENV === 'production' ? 'prod-db-url' : 'localhost-db-url';

// 讀取參數:node app.js --port 8080
console.log(process.argv[2]); // 輸出:--port

**dirname 與 **filename (僅限 CommonJS)

這兩個全域變數在處理檔案路徑時非常常用,但請注意它們只存在於 CommonJS 模組中:

  • __dirname:目前執行腳本所在目錄的絕對路徑。
  • __filename:目前執行腳本檔案的絕對路徑(包含檔名)。
在 ES Modules (ESM) 中,無法直接使用這兩個變數,需透過 import.meta.url 來換算路徑。

console 控制台工具

雖然與瀏覽器相似,但 Node.js 的 console 是將結果輸出到作業系統的 標準輸出 (STDOUT)標準錯誤 (STDERR)

  • console.time(label) / console.timeEnd(label):精確測量代碼執行時間。
  • console.table():以整齊的表格呈現物件或陣列資料。
const users = [
  { id: 1, name: 'Mike' },
  { id: 2, name: 'Jane' },
];
console.table(users);

定時器系列 (Timers)

Node.js 的定時器與瀏覽器行為雷同,但其實作是由事件迴圈控管的:

  • setTimeout(callback, delay):延遲執行。
  • setInterval(callback, delay):固定間隔執行。
  • setImmediate(callback):在事件迴圈的 Check 階段立即執行(Node.js 特有)。

核心全域資源概覽一覽表

全域資源主要用途
global / globalThis頂層全域作用域空間
process進程監控與環境變數管理
Buffer處理原始二進位資料 (Binary)
module / exports模組匯出定義 (CommonJS)
require()匯入模組的方法 (CommonJS)

理解這些內建的全域物件,能幫助你更流暢地操控 Node.js 的底層資源。