Задать вопрос
den0820
@den0820
Фронтенд Junior разработчик.

Живая перезагрузка Hot Module Replacement для нативного JavaScript не работает?

У меня есть единственный модуль, он же точка входа (entry) - index.js. Пытаюсь реализовать в нем Live Reload пока что на простом примере. И пока ничего не получается. По идее, чтобы сделать Live Reload надо подменить ссылку на старый модуль на новую ссылку, все это делается в колбэке module.hot.accept, что я и делаю. Помогите разобраться в чем моя ошибка. Суть состоит в том, чтобы изменяя значение перемнной greeting , изменения подтягивались без перезагрузки страницы. Вот ссылка на проект на Гитхаб:
https://github.com/denis862008/test
  • Вопрос задан
  • 973 просмотра
Подписаться 3 Средний 3 комментария
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Вариант 1. Горячая замена самого модуля:
const greetings = 'Hello, friend';
let h1;

function say() {
  h1 = document.createElement('h1');
  h1.innerHTML = greetings;
  document.body.appendChild(h1);
}

say();

if (module.hot) {
  module.hot.dispose(() => {
    document.body.removeChild(h1);
  });

  module.hot.accept();
}


Вариант 2. Горячая замена дочернего модуля:
Добавьте модуль greetings.js:
const greetings = 'Hello, friend';

export default greetings;

и измените основной модуль так:
import './styles.css';

let greetings = require('./greetings').default;
let h1;

function say() {
  h1 = document.createElement('h1');
  h1.innerHTML = greetings;
  document.body.appendChild(h1);
}

say();

if (module.hot) {
  module.hot.accept('./greetings', () => {
    greetings = require('./greetings').default;
    document.body.removeChild(h1);
    say();
  });
}

Если не используется транспиляция модулей из ES6 в CommonJS, то должно работать и так:
import './styles.css';
import greetings from './greetings';

let h1;

function say() {
  h1 = document.createElement('h1');
  h1.innerHTML = greetings;
  document.body.appendChild(h1);
}

say();

if (module.hot) {
  module.hot.accept('./greetings', () => {
    document.body.removeChild(h1);
    say();
  });
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
26 дек. 2024, в 21:50
5000 руб./за проект
26 дек. 2024, в 21:12
2500 руб./за проект
26 дек. 2024, в 21:01
10000 руб./за проект