// Tutorial //

How To Use __dirname in Node.js

Published on May 23, 2019 · Updated on December 6, 2021
Default avatar
By William Le
Developer and author at DigitalOcean.
How To Use __dirname in Node.js

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.

Prerequisites

To complete this tutorial, you will need:

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:

  1. mkdir dirname-example

Navigate to the project directory:

  1. cd dirname-example

Initialize it as a Node.js project:

  1. 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:

  1. 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:

  1. 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.


Want to learn more? Join the DigitalOcean Community!

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
About the authors
Default avatar
Developer and author at DigitalOcean.

Default avatar
Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?

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.