Introduction
__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.
Deploy your Node applications from GitHub using DigitalOcean App Platform. Let DigitalOcean focus on scaling your app.
Prerequisites
To complete this tutorial, you will need:
A general knowledge of Node.js. To learn more about Node.js, check out our How To Code in Node.js series.
This tutorial was verified with Node.js v17.2.0 and npm
v8.2.0.
Step 1 — Setting Up the Project
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.
Step 2 — Using __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:
src/api/controller.js
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:
cronjobs/hello.js
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.
Step 3 — Working With Directories
In this section, you will explore how to use __dirname
to make new directories, point to them, as well as add new files.
Making New Directories
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:
index.js
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.
Pointing to Directories
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:
index.js
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.
Adding Files to a Directory
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:
index.js
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.
Conclusion
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.