我有一个使用Vue.js和Webpack Dev Middleware的网站(通过HTTP.sys web服务器由ASP.NET Core网站提供服务,尽管我猜这并不重要)。 有谁知道如何设置我的网站以在每次热重载事件时清除浏览器的Javascript控制台? 这里是我能找到的唯一相关链接,但它似乎是针对我没有使用的Web服务器。 我不确定为什么特定的Web服务器会有影响。
在我的主要应用程序 .js 文件中:
if (module.hot) {
module.hot.accept() // already had this init code
module.hot.addStatusHandler(status => {
if (status === 'prepare') console.clear()
})
}
这让它在我的机器上始终正常工作。
另请参阅https://webpack.js.org/api/hot-module-replacement/#addstatushandler。
你的链接包含了针对你问题的响应。只要在你的main.js
文件中添加:
window.addEventListener('message', (e) => {
if (e.data && typeof e.data === 'string' && e.data.match(/webpackHotUpdate/)) {
console.log('hot reload happened')
console.clear()
}
})
完整的main.js文件示例:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
window.addEventListener('message', (e) => {
if (e.data && typeof e.data === 'string' && e.data.match(/webpackHotUpdate/)) {
console.log('hot reload happened')
console.clear()
}
})
编辑:我没有阅读您在 Github 问题上的回答。能否在多个事件上提供某种形式的 JSON.stringify(e)
来检查您拥有什么?
console.log(e instanceof MessageEvent)
时会发生什么?实际上,当我运行 JSON.stringify(e)
时,我只得到了 {"isTrusted":true}
,但是当我运行 JSON.stringify(e.data)
时,我得到了各种数据。 - Hammerbote.data.payload.payload
中得到以下JSON:https://jsfiddle.net/szal/qp8rojng/ - 没有“webpackHotUpdate”,我看不出有什么区别可以将HMR事件与其他事件区分开来,其中e.data.payload.event === 'flush'
。 - Patrick Szalapskie.data
只是一个字符串,但有时我也会收到您在fiddle中粘贴的那种消息。 - Hammerbot
created
中调用console.clear()
? - Roy J