Caching
History
Modules are cached after the first time they are loaded. This means (among other
things) that every call to require('foo') will get exactly the same object
returned, if it would resolve to the same file.
Provided require.cache is not modified, multiple calls to require('foo')
will not cause the module code to be executed multiple times. This is an
important feature. With it, "partially done" objects can be returned, thus
allowing transitive dependencies to be loaded even when they would cause cycles.
To have a module execute code multiple times, export a function, and call that function.
Modules are cached based on their resolved filename. Since modules may resolve
to a different filename based on the location of the calling module (loading
from node_modules folders), it is not a guarantee that require('foo') will
always return the exact same object, if it would resolve to different files.
Additionally, on case-insensitive file systems or operating systems, different
resolved filenames can point to the same file, but the cache will still treat
them as different modules and will reload the file multiple times. For example,
require('./foo') and require('./FOO') return two different objects,
irrespective of whether or not ./foo and ./FOO are the same file.