关于 webpack-dev-server 中 html 文件的自动刷新

背景:

  • webpack中,我们经常使用webpack-dev-server作为开发服务器,用于实时监听和打包编译静态资源(内存中),这样每当我们修改js、css等等文件时,客户端(如浏览器等)能够自动刷新页面,展示实时的页面效果。

  • 这种方式非常适合多显示器下,前端界面的开发


问题:

  • webpack-dev-server好像是只监听webpack.config.js中entry入口下文件(如js、css等等)的变动,只有这些文件的变动才会触发实时编译打包与页面刷新,而对于不在entry入口下的html文件,却不进行监听与页面自动刷新。

  • 请问该如何才能使html的修改也能触发页面的自动刷新呢?

阅读 16.3k
8 个回答

首先要理解 webpackhmr (Hot Module Replacement):

HMR is a way of exchanging modules in a running application (and adding/removing modules). You basically can update changed modules without a full page reload.

可以看出所谓模块热替换指的是页面在尽量不经过刷新的情况下将页面所引用的js或css等模块进行热替换。这里之所以说是尽量不经过刷新页面是因为webpack在热替换检查失败的情况会刷新整个页面,可以参见源码:https://github.com/webpack/webpack/blob/...

所以如果想让页面进行刷新可以采用下面几种方法:

  1. 让页面也成为模块,具体做法就是在页面的入口js文件里require页面的html,可参见Demo:https://github.com/AriaFallah/WebpackTut...

  2. 修改hot check强制reload整个页面(PS: 这种仍然没法监听页面变动)

  3. 通过其他方式来做,如: https://github.com/mklabs/tiny-lrhttps://www.npmjs.com/package/livereload

添加参数 watchContentBase: true,目录contentBase目录下的html文件变化也可监听并刷新

  devServer: {
    port: 9000,
    hot: true,
    contentBase: path.join(__dirname, '/example'),
    watchContentBase: true,
  },

你可以吧你想要hot reload的文件夹手动添加

$ webpack-dev-server --content-base folder/
新手上路,请多包涵

实现对静态文件(html,css,js等)的监听以自动刷新浏览器,建议使用gulp。
gulp官方提供了对该功能实现的例子
也可以参考这个demo

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题