15

Is there a function in node.js that gives me all currently loaded modules - or even better, their filenames?

I want to restart my process as soon as a loaded module gets updated and so need to know which files need to be monitored for changes...

Udo G
  • 12,572
  • 13
  • 56
  • 89
  • Why not use [Nodemon](https://github.com/remy/nodemon)? –  Mar 20 '12 at 18:29
  • 1
    Because it monitors all kinds of files, not just effectively loaded modules. Thanks for the hint anyway. – Udo G Mar 21 '12 at 13:42

3 Answers3

20

Check the module module source. Your answer is:

Object.keys(require('module')._cache);
Anatoliy
  • 29,485
  • 5
  • 46
  • 45
13

To complement Anatoliy's helpful answer:

Since Node.js v0.3.0, require.cache contains the loaded non-core modules:

 Object.keys(require.cache);  # lists full filenames of loaded non-core modules

The advantage of require.cache is that it is documented, unlike module._cache.

Note:

  • Core modules such as util do NOT show up in require.cache.

    • To test if a module is a core module, use require.resolve(<name>): if it returns <name>, i.e., merely the module name itself, the module is core; non-core modules will return their full filename.
  • require.cache contains a hash of all currently loaded non-core modules as module instances, keyed by their full filenames.

mklement0
  • 382,024
  • 64
  • 607
  • 775
0

Here is a full example if you want to filter on a specific lib / module name :

const libs = Object.keys(require('module')._cache);

const filteredItems = libs.filter(item => {
   return item.includes('aLibName');
});

console.log(filteredItems);
Spawnrider
  • 1,727
  • 1
  • 19
  • 32