要点
在Node.js中,
__dirname始终是当前正在执行的脚本所在的目录(请参阅参考资料)。所以,如果你键入
__dirname到
/d1/d2/myscript.js,该值会
/d1/d2。
相比之下,使用诸如和的库时,会在终端窗口中
.为您提供从中运行
node命令的目录(即工作目录)。从技术上讲,它从您的工作目录开始,但是可以使用进行更改。
path``fs``process.chdir()
例外是
.与一起使用时
require()。内部路径
require始终相对于包含对的调用的文件
require。
例如…
假设您的目录结构是
/dir1 /dir2 pathtest.js
并
pathtest.js包含
var path = require("path");console.log(". = %s", path.resolve("."));console.log("__dirname = %s", path.resolve(__dirname));你也是
cd /dir1/dir2node pathtest.js
你得到
. = /dir1/dir2__dirname = /dir1/dir2
您的工作目录就是
/dir1/dir2这样
.。由于
pathtest.js位于
/dir1/dir2那,所以
__dirname也要解决。
但是,如果您从以下位置运行脚本
/dir1
cd /dir1node dir2/pathtest.js
你得到
. = /dir1__dirname = /dir1/dir2
在这种情况下,您的工作目录
/dir1就是
.解析的目录,但
__dirname仍然解析为
/dir1/dir2。
.
内部使用require
…
如果里面
dir2/pathtest.js你有一个
require电话到包括文件里面
dir1,你会 一直 做
require('../thefile')因为里面的路径
require总是相对于您要在其中调用的文件的。它与您的工作目录无关。



