新手,刚开始学习webpack,想使用webdevserver,但定制性太差,于是研究了一下使用webpack-dev-middleware进行指定。

根据文档https://www.npmjs.com/package/webpack-hot-middleware

需要配置entry和output.

常规配置

entry: ['./src/main.js'],
output: {
  path: path.resolve(__dirname, 'dist/'),
  filename: '[name].[hash].js',
},

但在热重载中,文件是不存放在硬盘上的,而是使用了memory-fs模块存放在内存中的,因此原始规则不能使用了。

查看与webpack-dev-middleware配合需要使用到webpack-hot-middleware,在内存中使用时需要为入口文件添加一个'webpack-hot-middleware/client',

同时输出的文件也和原来不同,文件不再带有根目录,因此,Path和publicpath均需要修改,结果如下:

entry: {
app:[
  'webpack-hot-middleware/client',
  './src/main.js'
  ],
},
output: {
  path: '/',
  // publicPath: '/'
},

同时还需要添加相应的热重载插件:

plugins: [

    // Webpack 1.0 
    new webpack.optimize.OccurenceOrderPlugin(),
    // Webpack 2.0 fixed this mispelling 
    // new webpack.optimize.OccurrenceOrderPlugin(), 
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin()
]
至此Js文件的生成已经完成了,但缺少Html,一样不能访问,需要使用'html-webpack-plugin'处理Html文件,复制到内存中。
 
全样式代码
index.js
let express = require('express');
let webpack = require("webpack");
const fs = require('fs')
let app = express()
let port; let webpackconfig = require('./build/webpack.dev.config');
webpackconfig(app)
app.use(express.static('./static'));
app.get('/', function(req, res, next){
next();
}) app.listen(port || 9999, function(e){
console.log(`server start at ${port}`);
});

  webpack.base.config.js

var webpack = require("webpack");
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = {
entry: ['./src/main.js'],
output: {
path: path.resolve(__dirname, 'dist/'),
filename: '[name].[hash].js',
},
module: {
rules:[
{
test: /\.js/,
include:[path.resolve(__dirname,'src')],
loader: 'babel',
options: {
presets: 'es2015',
}
},
{
test: /\.vue/,
loader: 'vue',
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file',
options: {
name: '[name].[ext]?[hash]'
}
}
]
},
resolve: {
extensions: ['.vue','.js', 'json', ' '],
alias: {
'components': './src/',
}
},
}

  webpack.dev.config.js

let webpack = require("webpack");
let path = require('path');
let HtmlWebpackPlugin = require('html-webpack-plugin');
let devMiddleWare = require('webpack-dev-middleware');
let hotMiddleWare = require('webpack-hot-middleware');

let baseConfig = require('./webpack.base.config');
let devOption = {
entry: {
app:[
'webpack-hot-middleware/client',
'./src/main.js'
],
},
output: {
path: '/',
// publicPath: '/'
},
plugins: [
// new webpack.optimize.OccurenceOrderPlugin(),
// Webpack 2.0 fixed this mispelling
// new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin(),
new HtmlWebpackPlugin({
template: './src/index.html'
}),
]
}

module.exports = function(app){
let webpackconfig = Object.assign({}, baseConfig, devOption);// console.log(webpackconfig);

var compiler = webpack(webpackconfig);// console.log(compiler);
app.use(devMiddleWare(compiler,{
publicPath: webpackconfig.output.publicPath,
stats: {
colors: true,
chunks: false
}
}));
app.use(hotMiddleWare(compiler));
return app;
}

  

 

webpack使用webpack-dev-middleware进行热重载的更多相关文章

  1. webpack之带有可自动打开浏览器及热重载的基本配置

    什么是Webpack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并 ...

  2. (20/24) webpack实战技巧:watch实现热打包和添加代码备注

    在前面的学习中,我们一直使用webpack-dev-server充当(本地)服务器和完成打包任务,但是当出项目团队联合开发,共同使用一个服务器时,这时候我们需要实时进行打包以确保团队间能进行联调或者进 ...

  3. webpack 教程 那些事儿03-webpack两大精华插件,热加载

    本节主要讲述 webpack的两大经典开发调试插件,热插拔内存缓存机制 文章目录 1. html-webpack-plugin插件的使用 2. webpack-dev-middleware 插件登场 ...

  4. 【webpack学习笔记】a05-模块热替换

    什么是模块热替换? 这个功能会在程序运行过程中替换.添加或删除模块,而无需重新加载整个页面 有什么用呢? 保留在完全重新加载页面时丢失的应用程序状态. 只更新变更内容,以节省宝贵的开发时间. 调整样式 ...

  5. Webpack学习-Webpack初识

    一.前言 webpack 到底是个什么东西呢,看了一大堆的文档,没一个能看懂的,因为上来就是给个module.exports 然后列一大堆配置,这个干啥,那个干啥,没一点用.但凡要用一个东西,一个东西 ...

  6. vue热重载

    依据官网使用 webpack 的 Hot Module Replacement API,Vuex 支持在开发过程中热重载 mutation.module.action 和 getter.你也可以在 B ...

  7. 从零开始配置webpack(基于webpack 4 和 babel 7版本)

    webpack 核心概念: Entry: 入口 Module:模块,webpack中一切皆是模块 Chunk:代码库,一个chunk由十多个模块组合而成,用于代码合并与分割 Loader:模块转换器, ...

  8. Node.js + gulp 合并静态页模版,文件更新自动热重载。浏览器可预览

    github地址:https://github.com/Liaozhenting/template 使用的是ejs的语法.其实你用什么文件后缀都可以,都是按ejs来解析. 模板文件放在componen ...

  9. GO学习-(37) 使用Air实现Go程序实时热重载

    使用Air实现Go程序实时热重载 今天我们要介绍一个神器--Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率. 为什么需要实时加载? 之前使用P ...

随机推荐

  1. UIView的生命周期

    一. 大体流程: (loadView/nib)文件来加载view到内存-->viewDidLoad函数进一步初始化这些view-->内存不足时, 调用viewDidUnload函数释放vi ...

  2. python--Subprocess模块

    The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, ...

  3. 伪分布式下的hadoop简单配置

    今天大概尝试了一下伪分布式下的hadoop部署,简单的来总结一下 首先我们需要下载hadoop的压缩包文件:http://hadoop.apache.org/releases.html这里是hadoo ...

  4. Kinect For Windows V2开发日志四:使用OpenCV显示深度图像

    代码示例: #include <Kinect.h> #include <iostream> #include <opencv2\highgui.hpp> using ...

  5. 房间声学原理与Schroeder混响算法实现

    一.混响时间的计算与预测 所谓混响就是声音的直达声与反射声很紧凑的重合在一起时人耳所听到的声音,这个效果在语音的后期处理时特别有用.能产生混响最常见的场景就是房间内,尤其是空旷的房间中. 混响有直达声 ...

  6. 转:eclipse技巧之快速生成Override函数

    转自: http://www.cnblogs.com/junqilian/archive/2013/03/15/2960277.html 小提示:Eclipse 中快速实现或Override基类或接口 ...

  7. css3 transfrom使用以及其martix(矩阵)属性与其它属性的关系

    写法 其属性martix与skew .scale .translate之间的关系   兼容性 :       IE9+ : -ms-transform :  IE9只支持2D转换       fire ...

  8. JS无缝文字滚动(兼容各大浏览器)

    <style>*{margin:0px;padding:0px;border:0px;}body{font-size:12px}#demo1{height:auto;text-align: ...

  9. javascript面向对象的理解(一)

    第一次在园子发文: 关于js面向对象的理解: 工厂方式是什么?构造函数是什么?原形链?对象的引用? 1.对象是什么? 在js接触的比较多的就是对象了,比如: var arr = []; arr.num ...

  10. Android之所有API汇总

    这里就是所有的Android API,包含所有的API类:http://www.android-doc.com/reference/packages.html