首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Node.js 獲取腳本所在目錄的完整指南

     編輯:程式設計綜合問答

Node.js 中如何準確獲取當前腳本的路徑

在 Node.js 開發中,經常需要在腳本內部獲取該腳本文件所在的絕對路徑。特別是當腳本被其他模組 require 時,工作目錄可能發生變化,導致相對路徑不可靠。本文介紹兩種核心方法:__dirname 與 path.resolve() 的組合使用。

核心方案

Node.js 提供了全局變量 __dirname,它總是指向當前正在執行的腳本文件所在的目錄絕對路徑。配合 path 模組的 resolve() 方法,可以安全地構建目標文件路徑。

const fs = require('fs');
const path = require('path');

// 獲取腳本所在目錄下的 settings.json 絕對路徑
const configPath = path.resolve(__dirname, 'settings.json');

fs.readFile(configPath, 'utf-8', (err, data) => {
  if (err) {
    console.error('讀取配置失敗:', err);
    return;
  }
  console.log('配置內容:', data);
});

為什麼不推薦使用 process.cwd() 或 argv

  • process.cwd() 返回的是進程啟動時的工作目錄,若在其他目錄下執行 node /path/to/script.js,結果會不一致。
  • process.argv[1] 雖能獲取入口腳本路徑,但在模組被 require 時不可靠,且無法處理符號鏈接。

進階:支持 ES Modules (ESM)

在 .mjs 或 "type": "module" 環境中,__dirname 不可用,可使用 import.meta.url 替代:

import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const configPath = resolve(__dirname, 'settings.json');

最佳實踐總結

  1. 優先使用 path.resolve(__dirname, 'relative/path') 構建資源路徑。
  2. 避免硬編碼絕對路徑,保證項目可移植性。
  3. 讀取配置文件時,建議封裝為工具函數統一管理。

掌握這些技巧,能讓你的 Node.js 應用在部署、遷移、模組化引用時更加健壯可靠。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved