Как я могу перезагрузить модуль ES6 во время выполнения? - PullRequest
3 голосов
/ 23 апреля 2020

До появления модулей 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, если это возможно.

Кроме того, если это неясно, это все на стороне сервера. Я не пытаюсь передать новый модуль клиенту, просто заставить один модуль узла перезагрузить другой модуль узла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...