开发环境中,如果在更新代码后,浏览器能够自动刷新,能够很大程度上提升我们的开发效率。在此记录一下,以webpack-dev-server
和express
两者提供服务的情况下,如何设置浏览器自动刷新。
在webpack-dev-server
提供服务的情况下,浏览器自动刷新的设置相当简单,只需要在webpack.config.js
中加入以下代码即可:
...
devServer: {
contentBase: './views',
publicPath: '/',
},
...
相关contentBase
和publicPath
参数值可以按照需要进行设置,可参考webpack官网devServer配置项
若以express提供服务,则需要使用webpack-dev-middleware
和webpack-hot-middleware
模块进行配置。首先
npm install --save-dev webpack-dev-middleware webpack-hot-middleware
在 webpack 中添加配置
webpack-hot-middleware/client
的引用publicPath
配置entry: [
'webpack-hot-middleware/client?reload=true',
path.resolve(__dirname, './entry/index.jsx')
],
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/'
},
增加对webpack-dev-middleware
和webpack-hot-middleware
的使用:
const webpack = require('webpack');
const config = require('./webpack.config')();
const compiler = webpack(config);
app.use(require("webpack-dev-middleware")(compiler, {
noInfo: true, publicPath: config.output.publicPath
}));
app.use(require("webpack-hot-middleware")(compiler));
webpack-hot-middleware/client
可以配置很多选项,其中可以关注一下reload
的参数。由于webpack-hot-middleware
的主要目的是做热替换的。但是在某些项目中,比如React项目,单纯的webpack-dev-middleware
和webpack-hot-middleware
模块无法达到热替换的目的,设置reload=true
会在当 webpack 检测到文件更新,但是无法完成热替换时,将替换方案退化为,重新刷新浏览器。
热替换是比刷新浏览器更好的体验,React 的热替换可以参考: