升级到webpack4之后,每次修改代码都会整个页面刷新,而不是之前局部刷新了,如何解决?

发布于 2022-09-07 21:08:52 字数 999 浏览 23 评论 0

最近将项目的构建工具从webpack2升级到了webpack4。构建速度快了,生成的目标文件也小了很多。

但是出现了一个烦人的问题,就是现在修改了任意代码之后,浏览器都会整页刷新,而不是之前webpack2的jsonp方式局部刷新,导致开发效率降低了很多。

然后我找到了问题出在dev-derver.js的html-webpack-plugin相关的代码这里:

// force page reload when html-webpack-plugin template changes
compiler.plugin('compilation', function (compilation) {
    compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {debugger
        hotMiddleware.publish({action: 'reload'})
        cb()
    })
})

可能是webpack4中的html-webpack-plugin-after-emit事件的触发机制不一样了,导致webpack在每次修改任意代码文件时,都会触发html-webpack-plugin-after-emit事件,从而导致了整个页面刷新。或者是webpack4的模块引用机制不一样了,导致单个文件修改后被错误识别为巨大的修改(入口模板修改?),而必须刷新整个页面?

我把这代码去掉,确实可以解决每次都刷新整个页面的问题,但是有时候确实需要整个页面刷新时,它也不刷新了,需要手动F5刷新。经过尝试各种办法仍没法解决。

不知道有没有人遇到过类似的问题?

项目是基于vuejs + element-ui的。我上传了完整代码在github上: https://github.com/hzsrc/vue-...

烦请各路高手们帮忙看下~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谁人与我共长歌 2022-09-14 21:08:52

vue-loader升级了吗?热加载机制是vue-loader实现的

没有你我更好 2022-09-14 21:08:52

最近将项目的引用组件全部升了一遍级,没有再出现这个问题了。谢谢!

半岛未凉 2022-09-14 21:08:52

有没有遇到这个问题的呢?

TypeError: cb is not a function
    at /Users/labs/webpack/office/build/dev-server.js:39:9
    at Promise (eval at create (/Users/labs/webpack/office/node_modules/tapable/lib/HookCodeFactory.js:74:10), <anonymous>:17:16)
    at new Promise (<anonymous>)
    at AsyncSeriesWaterfallHook.eval [as promise] (eval at create (/Users/labs/webpack/office/node_modules/tapable/lib/HookCodeFactory.js:74:10), <anonymous>:4:8)
    at AsyncSeriesWaterfallHook.lazyCompileHook (/Users/labs/webpack/office/node_modules/tapable/lib/Hook.js:154:20)
    at /Users/labs/webpack/office/node_modules/html-webpack-plugin/index.js:673:47
    at Promise.resolve.then.then.then.then.then.then.then.then.catch.then.then (/Users/labs/webpack/office/node_modules/html-webpack-plugin/index.js:214:21)
    at process._tickCallback (internal/process/next_tick.js:68:7)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文