Node.js Path 模組:跨平台檔案路徑處理專家
如果你正在開發需要頻繁讀寫檔案的應用,絕對要避免手動用字串拼接路徑(例如 dir + '/' + file)。因為不同作業系統對路徑的定義不同:Windows 使用反斜線 \,而 Linux/macOS 使用斜線 /。使用內建的 path 模組能確保你的程式在任何環境下都能正常運作。
拼接路徑:join vs resolve
這兩個函式最容易被混淆,是開發者必須弄懂的核心區別:
1. path.join([...paths])
純粹的拼接。它會根據目前的作業系統自動選擇正確的分隔符,將所有片段連在一起,並修復多餘的斜線。
const path = require('path');
const result = path.join('/users', 'mike', 'docs', 'js.md');
// 輸出: '/users/mike/docs/js.md' (POSIX)
2. path.resolve([...paths])
絕對路徑解析。它會把你傳入的路徑片段「從右到左」處理,直到湊出一個完整的絕對路徑為止。如果最後仍是相對路徑,它會自動補上當前工作目錄。
// 假設你在 /home/project 目錄下執行
console.log(path.resolve('src', 'app.js'));
// 輸出: '/home/project/src/app.js'
拆解路徑獲取資訊
當你拿到一段完整路徑時,可以精確地提取各個組成部分:
const fullPath = '/var/www/site/index.html';
path.dirname(fullPath); // '/var/www/site' (父目錄)
path.basename(fullPath); // 'index.html' (檔名)
path.extname(fullPath); // '.html' (副檔名)
path.basename(fullPath, '.html'); // 'index' (不含副檔名)
萬能解析工具:path.parse()
如果你需要一次獲取所有資訊,parse() 是效率最高的選擇:
const info = path.parse('/home/user/notes.txt');
/*
{
root: '/',
dir: '/home/user',
base: 'notes.txt',
ext: '.txt',
name: 'notes'
}
*/
// 反向操作:path.format(info) 會將其轉回字串
實用進階工具
path.normalize(path):清理路徑中多餘的.或..以及重複的斜線。path.relative(from, to):計算從 A 目錄到 B 目錄的相對路徑距離。path.isAbsolute(path):快速檢查給定路徑是否為絕對路覽。
跨平台識別常數
path.sep:獲取當前作業系統的路徑分隔符(Windows 是\,Unix 是/)。path.delimiter:環境變數的分隔符(Windows 是;,Unix 是:)。
實戰最佳實務:定位專案資源
在 Node.js 中,最安全、最標準的定位方式是結合 __dirname:
// 保證不管開發者在什麼路徑啟動程式,都能準確找到專案根目錄下的 assets
const assetPath = path.join(__dirname, '..', 'assets', 'logo.png');
ESM 環境提醒:在 ES Modules 中不支援
__dirname。請參考 CommonJS vs ESM 章節來獲取路徑設定的替代方案。總結
- 永遠使用
path.join進行路徑組合。 - 開發跨平台應用時,避免在程式碼中寫死
/或\。 - 利用
path.resolve確保你的檔案路徑一定是穩定且唯一的絕對地址。