在Node.js中我们常用的几种文件路径有以下几种
__dirname
__filename
process.cwd()
-
./
或者../
在下面的测试中为了便于比较,我们将./
或者../
这两个相对路径用path.resolve()
转换成与前边几种一样的绝对路径,来看看几者的区别.
首先看看我们测试文件的目录结构
目录结构现在我们在a.js中写入如下代码
var path = require('path');
console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log( path.resolve('./'));
cd 到public目录下运行node a.js,看一下运行结果
运行结果1这样子看来,除了__filename
是当前js文件的绝对路径,其他都是当前文件所在目录的绝对路径.
现在我们在demo-test目录下,运行node public/a.js,再看看结果是什么
这个时候就能看出一点问题了
__dirname
:总是会返回当前文件所在目录的绝对路径
__filename
:当前文件的绝对路径
目前看来process.cwd()
和./
两次运行结果都是一样的,返回的是运行 node 命令时所在的文件夹的绝对路径.
但其实还有一种特殊情况,就是在require中使用./
,这个时候它和__dirname是一样的不会因为运行node所在的目录变化而变化,其他情况下都和process.cwd()
一样返回运行node命令时所在的文件夹的绝对路径.
网友评论