webpack热更新配置

热更新,可以使开发的人在修改代码后,不用刷新浏览器即可以看到修改后的效果。而它的另一个好处则是可以只替换修改部分相关的代码,大大的缩短了构建的时间。

热更新一般会涉及到两种场景下面的使用,一个是项目属于纯前端资源的,另一种是node工程项目。

纯前端资源配置

完整工程项目可参考github上面demo配置或者官方示例

配置过程内容比较多,这里大致描述下实现热更新能力需要做些什么。

首先安装相关的包,会发现热更新的能力主要是webpack-dev-server实现,它提供一个本地服务器,并且在内容发生变化时更新浏览器内容。而react-hot-loader主要作用是重刷react组件,非react项目中不要,这样配置又简化了。

然后在构建的配置文件中需要做一些配置,该配置作用是将热更新所需要的代码注入到入口js文件中

配置完成后,你只需要修改代码,静静的看着浏览器更新就好了。

react-hot-loader这个组件比较强大,可以在redux或者react native项目中使用。

node工程资源配置

这里配置方法与上面类似,在此基础之上多了一些配置

demo在github上可下载运行

首先, 我们需要一个中间件,嵌入到server中(server以koa2为例)

npm i —save koa-webpack

koa-webpack其中主要依赖两个包webpack-dev-middleware和webpack-hot-middleware, 拆开来使用也可以,配置也都类似

第二步,修改构建配置文件

之前这里是使用server来刷新内容的,这种场景下是去掉了webpack-dev-server插件而使用webpack-hot-middleware实现

entry: {
index: ['react-hot-loader/patch',
'webpack-hot-middleware/client?path=/__webpack_hmr&timeout=20000',
'./src/index.js'
]
}

第三步,在server中require这个中间件

const webpackMiddleware = require('koa-webpack');
const config = require('./webpack.config.babel');

第四步, 配置server所需要的参数

这里主要是config参数和dev.publicPath,其他参数可选而已,这里列出来看看

app.use(webpackMiddleware({
config: config,
dev: {
publicPath: config.output.publicPath,
// public path to bind the middleware to
// use the same as in webpack
// publicPath is required, whereas all other options are optional
noInfo: false
}
}));

第五步,修改启动server

const http = require('http');
const server = http.createServer(app.callback());
server.listen(8080, () => {
console.log('server running at http://127.0.0.1:8080');
});

启动程序后查看效果,修改代码后直接看浏览器内容是否更新

上面过程中可能遇到的问题

  1. 无法热更新,可能是服务器配置端口和构建中热更新插件的端口或路径不一致
  2. 入口js文件编译后,生成的资源的路径由参数dev.publicPath决定(因为文件是生成在内存中,由外部文件服务器来管理。这里不同于之前纯前端场景下路径由output.pathoutput.publicPath来控制)
  3. 生成环境和测试环境区分构建配置文件(好像是废话)

[转] webpack热更新配置小结的更多相关文章

  1. webpack热更新和常见错误处理

    时间:2016-11-03 10:50:54 地址:https://github.com/zhongxia245/blog/issues/45 webpack热更新 一.要求 局部刷新修改的地方 二. ...

  2. webpack热更新实现

    原文地址:webpack热更新实现 webpack,一代版本一代神,代代版本出大神.如果你的webpack和webpack-dev-server版本大于2小于等于3.6,请继续看下去.其它版本就必浪费 ...

  3. 轻松理解webpack热更新原理

    一.前言 - webpack热更新 Hot Module Replacement,简称HMR,无需完全刷新整个页面的同时,更新模块.HMR的好处,在日常开发工作中体会颇深:节省宝贵的开发时间.提升开发 ...

  4. koa和egg项目webpack热更新实现

    背景 在用Node.js+Webpack构建的方式进行开发时, 我们希望能实现修改代码能实时刷新页面UI的效果. 这个特性webpack本身是支持的, 而且基于koa也有现成的koa-webpack- ...

  5. Webpack 多html入口、devServer、热更新配置

    一.clean-webpack-plugin: 在每次生成dist目录前,先删除本地的dist文件(每次自动删除太麻烦) 1.安装clean-webpack-plugin   npm/cnpm i c ...

  6. webpack热更新问题和antd design字体图标库扩展

    标题也不知道怎么写好,真是尴尬.不过话说回来,距离上一次写文快两个月了,最近有点忙,一直在开发新项目, 今天刚刚闲下来,项目准备提测.借这个功夫写点东西,把新项目上学到的一些好的干活分享一下,以便之后 ...

  7. koa2 + webpack 热更新

    网上有很多express+webpack的热更新,但是koa2的很少,这两天研究了一下子,写一个简单的教程. 1.需要的包 webpack:用于构建项目 webpack-dev-middleware: ...

  8. webpack 热更新

    1.安装webpack npm install webpack -g  //全局安装 npm install webpack --save-dev  //开发环境 2.使用webpack 创建一个we ...

  9. webpack热更新 同时导出文件到本地

    webpack 配置热更新后,文件配置导出到本地 安装 npm i webpack-dev-server-output --save-dev 引入 const WebpackDevServerOutp ...

随机推荐

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. Codeforces 15 E. Triangles

    http://codeforces.com/problemset/problem/15/E 题意: 从H点走下去,再走回H点,不能走重复路径,且路径不能把黑色三角形包围的方案数 中间的黑色三角形把整张 ...

  3. Objects源码解析

    Objects类解析 ​ JDK7新增Objects类介绍(以下程序以1.8来说明) 简介: ​ JDK7里面新增的Objects类,本人学习HashMap源码偶遇此类,所以研究一下,本类将对象常用的 ...

  4. UE4联机编译光照

    UE4联机编译光照需要SwarmCoordinator以及SwarmAgent,在Engine\Binaries\DotNET目录下. SwarmAgent 我们主要关注Distribution Se ...

  5. sybench压测下模拟误truncate数据恢复

    基本环境:官方社区版MySQL 5.7.21 Row+Gtid开启sysbench压测,使用mysqldump备份数据库,执行truncate操作,恢复数据到truncate前的时间点1.切换日志,记 ...

  6. B. Array

    题目链接:http://codeforces.com/contest/224/problem/B 具体大意: 输入n,m. 给你一个区间,让你找某一段区间中包含m个不同的数,并且这段区间中的某一个小区 ...

  7. mysql gtid 第一篇

    GTID1 简介   就是全局事务ID(global transaction identifier )2 构成   uuid+transaction_id 3 格式  7a07cd08-ac1b-11 ...

  8. More Effective C++ 条款0,1

    More Effective C++ 条款0,1 条款0 关于编译器 不同的编译器支持C++的特性能力不同.有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类 ...

  9. 2017/05/04 java 基础 随笔

    1.java变量在使用之前必须初始化 int  a; a=10 ; int b; 没有初始化,也没有使用也不报错 2.强制类型转换  int a=8: byte b=6; b=(byte)(a+b); ...

  10. 【转】CentOS 7.X 系统安装及优化

    [转]CentOS 7.X 系统安装及优化 centos的演变 启动流程sysvinit 串行启动:一次一个,一个一个启动 并行启动:全部的一起启动 init优点 运行非常良好.主要依赖于shell脚 ...