Matko
Matko

Reputation: 3436

Immediately invoked function expression isn't executed on second require

Here is a sample code to make it more clear.

This is my module:

module.exports = ((parameter) => {
  console.log(parameter);
})('some value');

mymodule is actually the main server file and thus has to be executed immediately.

My unit tests in test suite require my module but the immediately invoked function expression is executed only first time.

require('./mymodule');
require('./mymodule');

How can I make this run every time ?

Upvotes: 0

Views: 681

Answers (2)

Maurits Rijk
Maurits Rijk

Reputation: 9985

You can invalidate the cache that Node maintains:

require('./mymodule');
delete require.cache[require.resolve('./mymodule')]
require('./mymodule');

You are probably better off though with exporting the function and calling it when needed, instead of only exporting the result.

Upvotes: 1

enapupe
enapupe

Reputation: 17059

From nodejs docs:

Multiple calls to require('foo') may 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.

https://nodejs.org/docs/v0.4.12/api/modules.html#caching

If you want to have a module execute code multiple times, then export a function, and call that function.

Upvotes: 1

Related Questions