Первая проблема:
Попытка HMR
пример, приведенный в документации веб-пакета по этой ссылке: https://webpack.js.org/guides/hot-module-replacement/. Как уже упоминалось в заголовке: " Gotchas ", я попытался удалить дочерний элемент, который был добавлен, когда app
загружается для в первый раз, затем я попытался вызвать функцию component()
снова, чтобы добавить в новый элемент, возвращенный, вызванный измененным print.js
модулем.
В браузере я получаю это, когда я изменяю текст в print.js
, который, кажется, работает, но когда я нажимаю кнопку, я продолжаю получать старое текстовое значение в print.js
Снимок экрана консоли браузера при изменении print.js
:
Снимок экрана, когда я нажимаю нажмите меня и проверьте кнопку на консоли (это не текст, который я обновил, его старый текст):
Мой входной файл main.js
:
import _ from 'lodash';
import printMe from './print.js';
function component() {
var element = document.createElement('div');
var btn = document.createElement('button');
element.innerHTML = _.join(['Hello', 'webpack'], ' ');
btn.innerHTML = 'Click me and check the console!';
btn.onclick = printMe;
element.appendChild(btn);
return element;
}
let element = component(); // Store the element to re-render on print.js changes
document.body.appendChild(element);
if (module.hot) {
module.hot.accept('./print.js', function() {
console.log('Accepting the updated printMe module!');
document.body.removeChild(element);
element = component(); // Re-render the "component" to update the click handler
document.body.appendChild(element);
});
}
Мой Print.js
файл:
export default function printMe() {
console.log('Updating123 and print.js...');
}
Вторая проблема:
Я упростил предыдущую задачу, чтобы вернуть простой текст из print.js
и консольный зарегистрированный текст внутри module.hot, и обнаружил даже странное поведение:
component()
функция, запущенная из module.hot.accept
функция обратного вызова регистрирует тот же старый текст при первом изменении внутри print.js
(простой текст4 - это текст до изменений, сделанных в print.js
)
[WDS] App updated. Recompiling...
client?81da:223 [WDS] App hot update...
log.js:24 [HMR] Checking for updates on the server...
main.jsx:14 Accepting the updated printMe module!
main.jsx:15 <div>simple text4</div>
log.js:24 [HMR] Updated modules:
log.js:24 [HMR] - ./src/print.js
log.js:24 [HMR] App is up to date.
& изменение второй раз внутри print.js
ничего не регистрирует в консоли браузера:
[WDS] App updated. Recompiling...
client?81da:223 [WDS] App hot update...
log.js:24 [HMR] Checking for updates on the server...
log.js:24 [HMR] Updated modules:
log.js:24 [HMR] - ./src/print.js
log.js:24 [HMR] App is up to date.
main.js
код:
import printMe from './print.js';
function component() {
var element = document.createElement('div');
element.innerHTML = printMe();
return element;
}
document.body.appendChild(component());
if (module.hot) {
module.hot.accept('./print.js', function() {
console.log('Accepting the updated printMe module!');
console.log(component());
});
}
print.js
код:
export default function printMe() {
var a = 'simple text2';
return a;
}