最近在弄框架,用到了webpack打包,当然不可避免的遇到了开发实际问题。在实际开发中,我们不可能改一个文件,就去构建一次,于是想到了实时更新。查看webpack,看到了webpack-dev-server。

webpack-dev-server

webpack已经想到了开发流程中的自动刷新,这就是webpack-dev-server。它是一个静态资源服务器,类似express服务器,只用于开发环境。一般来说,对于纯前端的项目(全部由静态html文件组成),简单地在项目根目录运行webpack-dev-server,然后打开浏览器 默认端口是8080,即http://localhost:8080就可以看到我们的页面了,修改任意关联的源文件并保存,webpack编译就会运行,并在运行完成后通知浏览器自动刷新。

其原理呢,就是根据所写的webpack.config.js文件,当改变entry中所涉及到的文件时,此时就会监听到并自动刷新浏览器。注意,这里生成的文件都是保存在内存中的,不会写入文件目录。因此我们改动文件,就不用再次构建,立即能看到效果,是不是很爽啊。哈哈,但是不要高兴。它也是有缺点的。

缺点:如果在请求某个静态资源的时候,webpack编译还没有运行完毕,webpack-dev-server不会让这个请求失败,而是会一直阻塞它,直到webpack编译完毕。这个对应的效果是,如果你在不恰当的时候刷新了页面,不会看到错误,而是会在等待一段时间后重新看到正常的页面,就好像“网速很慢”。

为了解决这个问题,webpack-hot-server应运而生。

webpack-hot-server

webpack-hot-middleware是一个结合webpack-dev-middleware使用的middleware,它可以实现浏览器的无刷新更新(hot reload)。这也是webpack文档里常说的HMR(Hot Module Replacement)。

建议看下具体实例:https://github.com/glenjamin/webpack-hot-middleware/tree/master/example。下载下来后,在example文件下,执行npm install,然后在浏览器中访问,http://localhost:1616/,然后改动client.js, 观察浏览器。你会发现浏览器更新了,但是没有刷新操作。

webpack.config.js文件:

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文件,文件中已经加了注释,这里就不再赘述。

有不同意见的话,可以提给我,大家共同探讨。

 

webpack之webpack-dev-server 与 webpack-hot-server的更多相关文章

  1. Vue.js 2.x Development Build With Hot Reloading For External Server (using Webpack template)

    This article assuming you created your project using webpack template. vue init webpack <PROJECT_ ...

  2. 【Webpack的使用指南 02】Webpack的常用解决方案

    说是解决方案实际上更像是webpack的插件索引. 写这一篇的目的是为了形成一个所以,将来要用时直接来查找即可. 索引目录 1.自动构建HTML,可压缩空格,可给引用的js加版本号或随机数:html- ...

  3. webpack从零开始第1课:安装webpack和webpack-dev-server

    原文地址:https://segmentfault.com/a/1190000012536871 webpack目录 第1课: 安装webpack和webpack-dev-server 第2课: 配置 ...

  4. webpack 快速入门 系列 —— 初步认识 webpack

    初步认识 webpack webpack 是一种构建工具 webpack 是构建工具中的一种. 所谓构建,就是将资源转成浏览器可以识别的.比如我们用 less.es6 写代码,浏览器不能识别 less ...

  5. [Webpack 2] Intro to the Production Webpack Course

    There are several lessons that will build on top of this project. It is a fairly standard, small web ...

  6. [js高手之路]深入浅出webpack教程系列3-配置文件webpack.config.js详解(下)

    本文继续接着上文,继续写下webpack.config.js的其他配置用法. 一.把两个文件打包成一个,entry怎么配置? 在上文中的webpack.dev.config.js中,用数组配置entr ...

  7. webpack学习笔记一:安装webpack、webpack-dev-server、内存加载js和html文件、loader处理非js文件

    一 .webpack学习环境准备: 1:window系统 2:安装node.js  官方网址 下载好后下一步下一步安装即可 安装步骤略过....... 3:nrm的安装 打开cmd命令控制台 输入:n ...

  8. webpack dllPlugin使用(基于vue-cli webpack模板)

    由于本例单入口时打包的文件体积过大,将其分成多入口. 主要涉及到的几个文件为: /index.html, /webpack.dll.config.js, /build/webpack.base.con ...

  9. [js高手之路]深入浅出webpack教程系列2-配置文件webpack.config.js详解(上)

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  10. webpack快速入门——实战技巧:webpack模块化配置

    首先在根目录,新建一个webpack_config文件夹,然后新建entry_webpack.js文件,代码如下: const entry ={}; //声明entry变量 entry.path={ ...

随机推荐

  1. 昆石VOS3000_2.1.2.0完整安装包及安装脚本

    安装包下载地址 http://www.51voip.org/post/57.html 安装教程: 上传安装包 ·给整个目录授权 chmod 777 /root/vosintsall 1.安装前准备 首 ...

  2. jquery input 赋值和取值

    记录一下: 在写一个input赋值,二话不说就直接利用了$('#xx').val()来进行取值和赋值,取值ok,赋值后利用alert显示正确,但是在html上并没有正确的显示出来,后来改为使用如下代码 ...

  3. MySQL Archive存储引擎

    200 ? "200px" : this.width)!important;} --> 介绍 从archive单词的解释我们大概可以明白这个存储引擎的用途,这个存储引擎基本上 ...

  4. c++ swap函数

    swap(a,b)也就是把a和b的值互换. 头文件:#include<algorithm>,swap要加using namespace std:

  5. rman 问题

    1. RMAN Repeatedly Fail To Backup Archivelogs with RMAN-20242 Cause: There is a mis-match between th ...

  6. unix_12c_db_init

    sample 1: add a new cdb 1.for the new db  Aprod please apply two new direcotry in Cdb3/Cdb4/Aprod  5 ...

  7. SuperSocket学习笔记(一)-一个完整的例子

    一.什么是SuperSocket 以下是作者的介绍 执行以下命令,获取SuperSocket项目 $ git clone https://github.com/kerryjiang/SuperSock ...

  8. Echarts和Quartz简介

    一.Echarts ​ ECharts 是由百度前端团队开发的一款开源的基于 js 图形报表组件,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大 ...

  9. 两年,VMware又重回巅峰?

    两年前,被公有云和容器打的焦头烂额的VMware一度被众多业界人士看衰,营收.股价双双下滑.然而,仅仅经过短短两年时间,VMware已经和AWS,IBM.微软.Rackspace等众多公有云厂商成为合 ...

  10. [转]MapReduce浅析

    本文转自http://edisonchou.cnblogs.com/ 一.什么是MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算.对于大 ...