Module wrapping at runtime in NodeJS

The Module Wrapper Function

When Node runs each of our module files are wrapped within an immediately-invoked function expression that has the following parameters:

(function (exports, require, module, __filename, __dirname))

This is called the module wrapper function

Note that one of these parameters is the module object.

Within any module we can access these parameters: you can think of them as metadata about the module itself. __filename and __dirname are particularly useful when writing to files and modifying directories.