53

How to get filename of script being executed in NodeJS application?

3 Answers 3

56

You can use variable __filename

http://nodejs.org/docs/latest/api/globals.html#globals_filename

2
  • 3
    This is only useful if you want to know the filename currently running the code that is looking at the __filename variable. If, instead, you need to know the name of the entire nodejs program that is running, use @Brad 's answer below.
    – Alan Mimms
    Commented Oct 4, 2016 at 22:25
  • 3
    This no longer works with ES modules. Commented Apr 25, 2019 at 0:44
28

Use the basename method of the path module:

var path = require('path');
var filename = path.basename(__filename);
console.log(filename);

Here is the documentation the above example is taken from.

As Dan pointed out, Node is working on ECMAScript modules with the "--experimental-modules" flag. Node 12 still supports __dirname and __filename as above.


If you are using the --experimental-modules flag, there is an alternative approach.

The alternative is to get the path to the current ES module:

const __filename = new URL(import.meta.url).pathname;

And for the directory containing the current module:

import path from 'path';

const __dirname = path.dirname(new URL(import.meta.url).pathname);
1
24

You need to use process.argv. In there will be the name of the script that was executed from the command line, which can be different than what you will find in __filename. Which is appropriate depends on your needs.

http://nodejs.org/docs/latest/api/process.html#process_process_argv

4
  • how is it different than __filename? It looks the same.
    – 1252748
    Commented Nov 6, 2017 at 20:03
  • 2
    @1252748 You should read the documentation: nodejs.org/docs/latest/api/modules.html#modules_filename __filename is the name of the file you're currently in. If I have a script that includes 5 other modules, there are 6 different possibilities of what __filename will be, depending on where I checked. Furthermore, the script might have a symlink that was used to execute it. process.argv will give you what was actually ran.
    – Brad
    Commented Nov 6, 2017 at 21:25
  • Be careful, be what was actually executed may not be where your script is actually located. In other words, it might be a symlink instead. Commented Mar 16, 2019 at 20:54
  • process.argv[1] to be exact :) Commented Jul 3 at 11:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.