node __dirname 解析 与 fs模块文件操作注意事项

2019-08-05  本文已影响0人  LilyLaw

node中我们可以使用相对路径,那为什么要用__dirname这个变量来找绝对路径呢???
下面的代码中给大家演示一个小例子:

文件操作 fileOperate.js

// fileOperate.js
const fs = require('fs');

console.log(__dirname);
console.log(__filename);

fs.readFile('../calc.js','utf8',(err,content)=>{
    if(err) throw err;
    console.log(content);
})

将fileOperate.js 载入 testModule.js

// testModule.js
const testModule = require('./modules/fileOperate.js');

运行 testModule.js


运行结果

文档结构:


文档结构

我们发现一个很奇怪的现象:console.log()打印出来的结果是对的,但是fs模块读文件的时候相对路径是错的,这是为啥呢???

原来fs.readFile()读文件时,文件路径是以入口文件为基准,在此基础上取相对路径
例子里面,入口文件是testModul.js,所以取相对路径就是错的了。

为了防止这种问题发生(项目开发过程中我们可能会把testModule.js 文件移动到任何地方),fs文件操作都取被操作文件的绝对路径

所以fileOperate.js 文件应该改为

const fs = require('fs');

console.log(__dirname);
console.log(__filename);

fs.readFile(`${__dirname}/../calc.js`,'utf8',(err,content)=>{
    if(err) throw err;
    console.log(content);
})

再运行,就对啦!

上一篇 下一篇

猜你喜欢

热点阅读