node全局变量__dirname与__filename的区别
简介
在Node.js中,__dirname 和 __filename 都是全局变量。它们可以在任何地方直接访问,不需要引入其他模块。它们可以用于获取当前模块文件的完整路径和文件名。
__dirname
__dirname 代表当前模块文件所在的目录的完整路径,而不包括模块文件本身的名称。
console.log(__dirname); // 输出 /Users/xxx/Documents
__filename
__filename 代表当前模块文件的完整路径和文件名,包括所在目录和文件名。
console.log(__filename); // 输出 /Users/xxx/Documents/test.js
区别
__dirname和__filename之间的关键区别在于后者包含当前模块文件的名称,而前者只包含当前模块文件所在的目录。
例如,您可以使用__dirname创建文件路径:
const path = require('path');
const fullPath = path.join(__dirname, './data/data.json'); // /Users/xxx/Documents/data/data.json
这种写法可以更加灵活,无论模块文件在哪里,都可以根据__dirname确定的目录结构来访问其他文件。
示例
示例 1
在此示例中,我们从本地保存的JSON文件中读取数据。利用__dirname我们可以轻松获取文件的完整路径。
const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, './data/data.json');
fs.readFile(filePath, (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(JSON.parse(data));
});
示例 2
在此示例中,我们使用__filename和__dirname打印当前正在运行的模块的完整路径和名称。
console.log('__filename: ', __filename);
console.log('__dirname: ', __dirname);
输出示例:
__filename: /Users/xxx/Documents/test.js
__dirname: /Users/xxx/Documents
总的来说,__dirname和__filename都是非常有用的全局变量,用于获取当前模块文件所在的位置信息。它们的区别在于 __filename 包含文件名,而 __ dirname 只包含所在目录的完整路径。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node全局变量__dirname与__filename的区别 - Python技术站