До появления модулей ES6 было (как мне говорят другие ответы в стеке) легко заставить перезагрузить скрипт JS, удалив его require
кеш:
delete require.cache[require.resolve('./mymodule.js')]
Однако Я не могу найти эквивалент для модулей ES6, загруженных через import
.
Этого может быть достаточно, чтобы прояснить этот вопрос, но на всякий случай вот упрощенная версия кода. У меня есть сервер узлов, на котором выполняется что-то вроде:
-- look.mjs --
var look = function(user) { console.log(user + " looks arond.") }
export { look };
-- parser.mjs --
import { look } from './look.mjs';
function parse(user, str) {
if (str == "look") return look(user);
}
Я хочу иметь возможность вручную изменять файл look.m js (например, чтобы исправить слово с ошибкой), вызывать функцию это приводит к повторному импорту look.m js во время выполнения, так что parse () возвращает новое значение без необходимости перезапускать сервер узла.
Я попытался перейти на импорт dynamici c, например так:
-- parser.mjs --
function parse(user, str) {
if (str == "look") {
import('./look.mjs').then(m => m.look(user))
}
}
Это тоже не работает. (Я имею в виду, что это так, но не перезагружает look.m js каждый раз, когда он вызывается, только в первый раз) И я бы предпочел продолжать использовать stati c import, если это возможно.
Кроме того, если это неясно, это все на стороне сервера. Я не пытаюсь передать новый модуль клиенту, просто заставить один модуль узла перезагрузить другой модуль узла.