Require multiple times

If you use jest and want code to be run each time for testing, you can use jest.isolateModules:

jest.isolateModules(() => {
    require("./my_script");
});

jest.isolateModules(() => {
    require("./my_script");
});

require() caches its results. So, the first time a module is required, then its initialization code runs. After that, the cache just returns the value of module.exports without running the initialization code again. This is a very desirable feature of node.js modules.

If you want code to be run each time, then you should export a function that you can call after you require it like this:

Your module:

module.exports = function() {
    console.log("IMPORTED");
}

Requiring it and running the code each time

require("./my_script")();
require("./my_script")();

Also, please note that there is no reason to use an IIFE in a module. The node.js module is automatically wrapped in a private function already so you don't need to do it again.


As you now say in a comment (but your question does not directly say), if you don't want to edit my_script at all (which is simply the wrong way to solve this issue), then you have to delete the module from the node.js cache before requiring it again which can be done like this:

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

I would not recommend this as a solution. It's not the proper way to code in node.js. It's a hack work-around. And, it is not compatible with ESM modules.