Node.js中的文件路径大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三个都是绝对路径。
关于这几个路径的意思:

1
2
3
4
__dirname:    获得当前执行文件所在目录的完整目录名
__filename: 获得当前执行文件的带有完整绝对路径的文件名
process.cwd():获得当前执行node命令时候的文件夹目录名
./: 文件所在目录

我在桌面的一个新建文件夹里新建了如下目录:

1
2
3
4
5
新建文件夹/
-dir
-dir1
-path.js
-dir2

path.js里有如下代码:

1
2
3
4
5
6
7
const path = require('path')

console.log('__dirname:', __dirname)
console.log('__filename:', __filename)
console.log('process.cwd():', process.cwd())
console.log('./:', path.resolve('./'))

通过cd命令到 C:\Users\Administrator\Desktop\新建文件夹\dir\dir1 目录下,执行

1
node path.js  或 node ./path.js

结果为:

1
2
3
4
__dirname: C:\Users\Administrator\Desktop\新建文件夹\dir\dir1
__filename: C:\Users\Administrator\Desktop\新建文件夹\dir\dir1\path.js
process.cwd(): C:\Users\Administrator\Desktop\新建文件夹\dir\dir1
./: C:\Users\Administrator\Desktop\新建文件夹\dir\dir1

根据这几个路径的含义,这个执行结果是完全正确的。
然后我们cd到 dir目录下执行

1
node dir1/path.js

结果为:

1
2
3
4
__dirname: C:\Users\Administrator\Desktop\新建文件夹\dir\dir1
__filename: C:\Users\Administrator\Desktop\新建文件夹\dir\dir1\path.js
process.cwd(): C:\Users\Administrator\Desktop\新建文件夹\dir
./: C:\Users\Administrator\Desktop\新建文件夹\dir

这样看的话感觉./process.cwd()是一样的,都指向的是运行node命令是的目录。
但是呢,如果是在require(‘./xx.js’)时,这个./指的就不再是node命令的执行路径了,而是以其文件的相对路径
具体还可以查看require的引用规则:require源码解读(阮一峰)