全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-15 5 分钟 ✍️ juanwangdev

Node.js __dirname

__dirname 是 Node.js 的全局变量,返回当前模块文件所在目录的绝对路径。

基本用法

JavaScript
// 假设文件路径为 /home/user/project/app.js
console.log(__dirname);
// 输出: /home/user/project

console.log(__filename);
// 输出: /home/user/project/app.js

与 __filename 的关系

JavaScript
const path = require('path');

// __dirname 是 __filename 的目录部分
console.log(__dirname === path.dirname(__filename)); // true

// 拼接完整文件路径
const filePath = path.join(__dirname, 'data.txt');

常见应用场景

读取同目录文件

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

// 读取当前目录下的 config.json
const configPath = path.join(__dirname, 'config.json');
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));

设置相对路径

JavaScript
// 使用 __dirname 确保路径始终正确
const logPath = path.join(__dirname, 'logs', 'app.log');
const dataPath = path.join(__dirname, '..', 'data', 'users.json');

注意事项

JavaScript
// __dirname 不是真正的全局变量,而是每个模块的局部变量
// 在模块外部无法访问

// ❌ 错误:使用相对路径可能因执行目录不同而失败
fs.readFileSync('./config.json');

// ✅ 正确:使用 __dirname 确保路径正确
fs.readFileSync(path.join(__dirname, 'config.json'));

__dirname 的值在模块加载时就已确定,不会随 process.cwd() 的变化而改变。

要点总结

  • __dirname 返回当前模块所在目录的绝对路径
  • 使用 path.join(__dirname, ...) 拼接路径确保正确性
  • 不随执行目录改变,与 process.cwd() 不同
  • 每个模块都有自己的 __dirname
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 Node.js Buffer 缓冲区
下一篇 → Node.js __filename
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码