Webpack热更新调试的几种方法
项目背景
最近做的几个vue项目都使用的webpack构建,也了解了下webpack其中调试的方法,主要有以下几种:
- devtool configuration option
- webpack-dev-server
- webpack-dev-middleware
这里重点说下2和3的使用。
webpack-dev-server
这是一个小型的node.js express服务器,它使用webpack-dev-middleware去处理webpack bundle。
The server emits information about the compilation state to the client, which reacts to those events. You can choose between different modes, depending on your needs.
它支持两种自动刷新方式
iframe模式(使用iframe模式很简单,只要启动dev-server之后直接访问类似http://localhost:8080/webpack-dev-server/index.html路径就可以了。这是页面会被嵌入到iframe)。它有这几个特点
-.No configuration change needed.
-.Nice information bar on top of your app.
-.URL changes in the app are not reflected in the browser’s URL bar.inline模式
inline模式又分为命令行模式和node api模式
命令行模式
直接在package.json中的script字段中加入webpack命令。比如vue-cli中simple模板生成的就是这种格式
可以看出dev模式下,只需要加入–inline参数启动就可以了,需要Hot Module Replacement也就是直接加上–hot参数,十分简单方便。这种情况下,都会默认去执行webpack.config.js文件
node api模式
这种模式比cli方式要复杂。一言不合直接上已经实践的代码吧。
首先要使用node api inline模式,需要将webpack-dev-server/client?http://localhost:8080/加入到所有的entry point。
要支持Hot Module Replacement,则需要
- 在entry point中加入”webpack/hot/dev-server”
- 在plugin中加入new webpack.HotModuleReplacementPlugin()
- 在WebpackDevServer构造方法中设置hot:true
这里的publicPath一定要设置http://localhost:8080/static/,否则生成不了bundle.js文件.
另外也要注意到这里prd生成compiler之后还要调用一次run方法。
webpack-dev-middleware
The webpack-dev-middleware is a small middleware for a connect-based middleware stack. It uses webpack to compile assets in-memory and serve them. When a compilation is running every request to the served webpack assets is blocked until we have a stable bundle.
webpack-dev-server就是使用它作为中间件,这里当然也可以单独剥离这个中间件出来使用。vue-cli的标准模板生成的代码使用的就是webpack-dev-middleware+express.