__dirname
is an environment variable that tells you the absolute path of the directory containing the currently executing file.
In this article, you will explore how to implement __dirname
in your Node.js project.
To complete this tutorial, you will need:
This tutorial was verified with Node.js v17.2.0 and npm
v8.2.0.
This tutorial will use the following sample directory structure to explore how __dirname
works:
dirname-example
├──index.js
├──public
├──src
│ ├──helpers.js
│ └──api
│ └──controller.js
├──cronjobs
│ └──hello.js
└──package.json
You can start by creating a dirname-example
directory in your terminal:
- mkdir dirname-example
Navigate to the project directory:
- cd dirname-example
Initialize it as a Node.js project:
- npm init --yes
Now, you will create the directories and files to experiment with.
__dirname
You can use __dirname
to check on which directories your files live.
Create and edit controller.js
in the api
subdirectory in the src
directory:
console.log(__dirname) // "/Users/Sam/dirname-example/src/api"
console.log(process.cwd()) // "/Users/Sam/dirname-example"
Then, run the script:
- node src/api/controller.js
Create and edit hello.js
in the cronjobs
directory:
console.log(__dirname) // "/Users/Sam/dirname-example/cronjobs"
console.log(process.cwd()) // "/Users/Sam/dirname-example"
Then, run the script:
- node cronjobs/hello.js
Notice that __dirname
has a different value depending on which file you console it out. The process.cwd()
method also returns a value, but the project directory instead. The __dirname
variable always returns the absolute path of where your files live.
In this section, you will explore how to use __dirname
to make new directories, point to them, as well as add new files.
To create a new directory in your index.js
file, insert __dirname
as the first argument to path.join()
and the name of the new directory as the second:
const fs = require('fs');
const path = require('path');
const dirPath = path.join(__dirname, '/pictures');
fs.mkdirSync(dirPath);
Now you’ve created a new directory, pictures
, after calling on the mdirSync()
method, which contains __dirname
as the absolute path.
Another unique feature is its ability to point to directories. In your index.js
file, declare a variable and pass in the value of __dirname
as the first argument in path.join()
, and your directory containing static files as the second:
express.static(path.join(__dirname, '/public'));
Here, you’re telling Node.js to use __dirname
to point to the public
directory that contains static files.
You may also add files to an existing directory. In your index.js
file, declare a variable and include __dirname
as the first argument and the file you want to add as the second:
const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, '/pictures');
fs.openSync(filePath, 'hello.jpeg');
Using the openSync()
method will add the file if it does not exist within your directory.
Node.js provides a way for you to make and point to directories. And add files to existing directories with a modular environment variable.
For further reading, check out the Node.js documentation for __dirname
, and the tutorial on using __dirname
in the Express.js framework.
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.
Sign up
This is a great article, but it doesn’t answer WHY we need to use __dirname in the first place? Usually we just do “./” to access current directory.