最近在弄框架,用到了webpack打包,固然不可避免的遇到了开发实际问题。在实际开发中,咱们不可能改一个文件,就去构建一次,因而想到了实时更新。查看webpack,看到了webpack-dev-server。javascript
webpack-dev-serverhtml
webpack已经想到了开发流程中的自动刷新,这就是webpack-dev-server。它是一个静态资源服务器,相似express服务器,只用于开发环境。通常来讲,对于纯前端的项目(所有由静态html文件组成),简单地在项目根目录运行webpack-dev-server,而后打开浏览器 默认端口是8080,即http://localhost:8080就能够看到咱们的页面了,修改任意关联的源文件并保存,webpack编译就会运行,并在运行完成后通知浏览器自动刷新。前端
其原理呢,就是根据所写的webpack.config.js文件,当改变entry中所涉及到的文件时,此时就会监听到并自动刷新浏览器。注意,这里生成的文件都是保存在内存中的,不会写入文件目录。所以咱们改动文件,就不用再次构建,当即能看到效果,是否是很爽啊。哈哈,可是不要高兴。它也是有缺点的。java
缺点:若是在请求某个静态资源的时候,webpack编译尚未运行完毕,webpack-dev-server不会让这个请求失败,而是会一直阻塞它,直到webpack编译完毕。这个对应的效果是,若是你在不恰当的时候刷新了页面,不会看到错误,而是会在等待一段时间后从新看到正常的页面,就好像“网速很慢”。webpack
为了解决这个问题,webpack-hot-server应运而生。git
webpack-hot-servergithub
webpack-hot-middleware是一个结合webpack-dev-middleware使用的middleware,它能够实现浏览器的无刷新更新(hot reload)。这也是webpack文档里常说的HMR(Hot Module Replacement)。web
建议看下具体实例:https://github.com/glenjamin/webpack-hot-middleware/tree/master/example。下载下来后,在example文件下,执行npm install,而后在浏览器中访问,http://localhost:1616/,而后改动client.js, 观察浏览器。你会发现浏览器更新了,可是没有刷新操做。express
webpack.config.js文件:npm
var webpack = require('webpack'); module.exports = { context: __dirname, entry: [ // Add the client which connects to our middleware // You can use full urls like 'webpack-hot-middleware/client?path=http://localhost:3000/__webpack_hmr' // useful if you run your app from another point like django 'webpack-hot-middleware/client?path=/__webpack_hmr&timeout=20000', // And then the actual application './client2.js' ], output: { path: __dirname, publicPath: '/', filename: 'bundle.js' }, devtool: '#source-map', plugins: [ new webpack.optimize.OccurenceOrderPlugin(), new webpack.HotModuleReplacementPlugin(), new webpack.NoErrorsPlugin() ], };
其中,webpack-hot-middleware/client?path=/__webpack_hmr&timeout=20000,开头:webpack-hot-middleware/client,这个你直接粘贴就好,我测试下来这个client和上下文无关。而? 后面的 path=/__webpack_hmr&timeout=20000
,其中path有HMR服务监听,timeout应该是知道失联的话,达到20000毫秒就算超时,没必要再作尝试。
另外再就是server.js文件,文件中已经加了注释,这里就再也不赘述。
有不一样意见的话,能够提给我,你们共同探讨。