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 variable instead of just a regular
./? I've been using ./ thus far in my code and just discovered the existence of
__dirname, and essentially want to know whether it would be smart to convert my ./'s to that, and if so, why that would be a smart idea.
__dirname is always the directory in which the currently executing script resides (see this). So if you typed
/d1/d2/myscript.js, the value would be
. 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
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 /dir1 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.
This recipe can be found in it's original form on Stack Over Flow.