• webpack使用webpack-dev-middleware进行热重载


    新手,刚开始学习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;
    }

      

     
  • 相关阅读:
    一本通1647迷路
    一本通1646GT 考试
    矩阵
    矩阵快速幂
    数学基础
    清北学堂学习经验(论颓废)
    钟皓曦第二天讲课
    P3275 [SCOI2011]糖果
    P1270 “访问”美术馆
    P2015 二叉苹果树
  • 原文地址:https://www.cnblogs.com/dreamless/p/6008362.html
Copyright © 2020-2023  润新知