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 的底層資源。