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
📝 发现内容有误?点击此处直接编辑