require()
кеширует свои результаты. Итак, когда модуль требуется в первый раз, запускается его код инициализации. После этого кеш просто возвращает значение module.exports без повторного запуска кода инициализации. Это очень желательная особенность модулей node.js.
Если вы хотите, чтобы код выполнялся каждый раз, вы должны экспортировать функцию, которую вы можете вызывать после того, как она вам понадобится, следующим образом:
Ваш модуль:
module.exports = function() {
console.log("IMPORTED");
}
Требование и запуск кода каждый раз
require("./my_script")();
require("./my_script")();
Также обратите внимание, что нет причин использовать IIFE в модуле. Модуль node.js автоматически включается в приватную функцию, поэтому вам не нужно делать это снова.
Как вы сейчас говорите в комментарии (но ваш вопрос прямо не говорит), если вы вообще не хотите редактировать my_script (что является просто неправильным способом решения этой проблемы), то вам нужно удалить модуль из кеша node.js перед повторным запросом, что можно сделать так:
delete require.cache[require.resolve('./my_script')];
Я бы не рекомендовал это как решение. Это не правильный способ кодирования в node.js. Это обходной путь.