webpack4.0 入门实践教程(9)
webpack-dev-serve
上面讲到了都是如何打包文件,但是开发中我们需要一个本地服务,这时我们可以使用 webpack-dev-server 在本地开启一个简单的静态服务来进行开发。
webpack-dev-server 是 webpack 官方提供的一个工具,可以基于当前的 webpack 构建配置快速启动一个静态服务。当 mode 为 development 时,会具备 hot reload 的功能,即当源码文件变化时,会即时更新当前页面,以便你看到最新的效果。...
npm install webpack-dev-server -D
package.json 中 scripts 中添加
"start": "webpack-dev-server --mode development"
默认开启一个本地服务的窗口 http://localhost:8080/ 便于开发
配置开发服务器
我们可以对 webpack-dev-server 做针对性的配置
module.exports = {
// 配置开发服务器
devServer: {
port: 1234,
open: true, // 自动打开浏览器
compress: true // 服务器压缩
//... proxy、hot
}
}
- contentBase: 服务器访问的根目录(可用于访问静态资源)
- port: 端口
- open: 自动打开浏览器
模块热替换(hot module replacement)
模块热替换( HMR - Hot Module Replacement )功能会在应用程序运行过程中替换、添加或删除模块,而无需重新加载整个页面。主要是通过以下几种方式,来显著加快开发速度:
- 保留在完全重新加载页面时丢失的应用程序状态。
- 只更新变更内容,以节省宝贵的开发时间。
- 调整样式更加快速 - 几乎相当于在浏览器调试器中更改样式。
上面我们 npm start 后修改一次文件,页面就会刷新一次。这样就存在很大问题了,比如我们使用 redux , vuex 等插件,页面一刷新那么存放在 redux , vuex 中的东西就会丢失,非常不利于我们的开发。
HMR 配合 webpack-dev-server ,首先我们配置下 webpack.config.js
const webpack = require('webpack')
module.exports = {
devServer: {
//...
hot: true
},
plugins: [
new webpack.HotModuleReplacementPlugin()
//...
]
}
配置后还不行,因为 webpack 还不知道你要更新哪里, 修改 src/index.js 文件, 添加
if (module.hot) {
module.hot.accept()
}
重启服务, npm start 之后,修改引入 index.js 文件后,页面就不会重新刷新了,这便实现了 HMR
但是但是有个问题是,你修改 css/less 等样式文件并未发生改变, what ?
