When programming in Node.js and referencing files that are located somewhere in relation to your current directory, is there any reason to use the
__dirname is always the directory in which the currently executing script resides (see this). In other words, you typed
__dirname into one of your script files and value would be that file's directory.
. gives you the directory from which you ran the
node command in your terminal window (i.e. your working directory).
The exception is when you use
require(). The path inside
require is always relative to the file containing the call to
. always means the directory containing that file.
Let's say your directory structure is
/dir1 /dir2 pathtest.js
var path = require("path"); console.log(". = %s", path.resolve(".")); console.log("__dirname = %s", path.resolve(__dirname));
and you do
cd /dir1/dir2 node pathtest.js
. = /dir1/dir2 __dirname = /dir1/dir2
Your working directory is
/dir1/dir2 so that's what
. resolves to. Since
pathtest.js is located in
/dir1/dir2 that's what
__dirname resolves to as well.
However, if you run the script from
cd .. node dir2/pathtest.js
. = /dir1 __dirname = /dir1/dir2
In that case, your working directory was
/dir1 so that's what
. resolved to, but
__dirname still resolves to
dir2/pathtest.js you have a
require call into include a file inside
dir1 you would always do
because the path inside
require is always relative to the file in which you are calling it. It has nothing to do with your working directory.