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()时才使用相对路径(./, ../)的写法,其他地方一律使用绝对路径,如下:
// 当前目录下 |