Может быть, что-то вроде этого:
if (process.env.DEV) {
window.addEventListener('message', ({ data: { type } }) => {
if (type === 'webpackInvalid') {
$(window).off('beforeunload');
} else if (type === 'INIT_INSTANCE') {
$(window).on('beforeunload', myCustomWindowBeforeUnloadFunction);
}
});
}
Я добавил process.env.DEV
с EnvironmentPlugin
, чтобы убедиться, что код не попал в производство. Вы также можете использовать process.env.NODE_ENV === 'development'
, который работает без добавления EnvironmentPlugin
, поскольку Webpack добавляет это автоматически .
Или, используя HMR's addStatusHandler
function :
if (process.env.DEV && module.hot) {
module.hot.accept();
module.hot.addStatusHandler((status) => {
if (status === 'prepare') {
$(window).off('beforeunload');
} else if (/apply|abort|fail/.test(status)) {
$(window).on('beforeunload', myCustomWindowBeforeUnloadFunction);
}
});
}
Примечание module.hot
будет там, если вы используете HotModuleReplacementPlugin
, нет необходимости импортировать это, как объяснено здесь :
Если Горячая замена модуля была включена через HotModuleReplacementPlugin
, его интерфейс будет отображаться в свойстве module.hot
. Как правило, пользователи проверяют, доступен ли интерфейс, а затем начинают работать с ним.
Также, возможно, вместо проверки apply
, abort
или fail
во втором условии , вы можете использовать idle
.