Node 中的文件路径大概有__dirname
,__filename
,process.cwd()
, ./
或者 ../
,前三个都是绝对路径,为了便于比较,./
和../
我们通过 path.resolve('./')
来转换为绝对路径。
例如当前的文件结构如下:
app/ |
在model/task.js
中编写如下代码:
var path = require('path'); |
在mode/test.js
中编写如下代码:
var fs = require('fs'); |
在app
目录下,执行node model/task.js
,得到的输出:
/$dir/app/model |
执行node model/test.js
,会报路劲错误,readFile
找不到../lib/common.js
路劲
结论:
__dirname
: 总是返回被执行的 js 所在文件夹的绝对路径__filename
: 总是返回被执行的 js 的绝对路径process.cwd()
: 总是返回运行 node 命令时所在的文件夹的绝对路径../
: 在require()
中使用,返回被运行的 js 所在的上一层文件夹路劲,其他情况下返回运行 node 命令时所在的上一层文件夹路劲./
: 在require()
中使用是跟__dirname
的效果相同,不会因为启动脚本的目录不一样而改变,在其他情况下跟process.cwd()
效果相同,是相对于启动脚本所在目录的路径。
只有在require()
时才使用相对路径(./, ../)
的写法,其他地方一律使用绝对路径,如下:
// 当前目录下 |