Webpack配置了HMR但修改代码后页面还是整页刷新,怎么回事?
我用Webpack搭了个开发环境,明明启用了Hot Module Replacement,但每次改JS文件页面还是会整页刷新,根本没热更新。查了文档也加了module.hot.accept,但好像没生效。
这是我的入口文件写法:
if (module.hot) {
module.hot.accept('./app.js', () => {
console.log('HMR triggered');
});
}
webpack-dev-server也加了–hot参数,难道是accept的路径写错了?还是需要额外插件?真的搞不懂哪里漏了……
首先看下webpack配置,确保devServer里hot设为true(新版本webpack5不需要--hot参数了)。建议你检查下webpack.config.js:
这里需要注意,webpack5之后HotModuleReplacementPlugin已经默认启用了,但有些项目可能还需要手动添加。
然后是入口文件的写法问题,你现在的写法有些小问题。热更新需要同时处理依赖链,建议改成这样:
常见踩坑点:
1. 如果用了react/vue这类框架,需要对应的loader支持热更新(比如react-hot-loader)
2. 检查webpack的target配置,必须是web而不是node
3. 某些loader会强制刷新页面(比如style-loader的hmr参数没开)
4. 文件路径大小写问题(特别是Linux系统)
如果还是不行,可以试着在webpack配置里加上:
这样能在控制台看到更详细的hmr日志,方便排查问题。
最后,说个我踩过的坑:如果项目里有多个webpack配置混合使用(比如主配置+storybook配置),可能会互相干扰导致hmr失效。这种情况建议分开单独跑。