Nodejs中的文件路径问题

自己在模块里通过相对路径获取文件的时候发现了问题,于是决定了解一下Nodejs中文件路径的问题。

在入口文件app.js中我有如下这么一段代码:

1
fs.readFileSync('./_config.yml', 'utf8')

我的目的是想获取当前目录下的配置文件,正常执行没问题

1
node app.js

但当我的执行环境变了的情况下,问题就出来了,执行下面的命令:

1
node ./myapp/app.js

文件找不到了!

原因

Nodejs中有两个全局变量__dirname__filename,这两个分别指向当前文件所在文件夹的绝对路径以及当前文件的的绝对路径

当我们使用相对路径操作文件的时候,这时他总是和node执行命令的位置有关的,是相对于你命令执行的位置来说的。所以上面当我执行命令的位置发生变化时,代码就出错了。解决的办法就是涉及到文件操作的时候要使用绝对路径

1
path.resolve(__dirname, target)

但是在require()中的使用还是正常使用,因为Nodejs模块加载实现了相对路径到绝对路径的转换,可以看我之前的一篇文章Nodejs模块加载