为了账号安全,请及时绑定邮箱和手机立即绑定

分享下我的webpack.config.js

var path = require('path');
var glob = require('glob');
var webpack = require('webpack');
/*提取样式插件,可以将你的样式提取到单独的css文件里*/
var ExtractTextPlugin = require('extract-text-webpack-plugin');
/*
生成HTML的插件,
具体可以去这里查看https://www.npmjs.com/package/html-webpack-plugin
 */
var HtmlWebpackPlugin = require('html-webpack-plugin');
//提取公共的js库插件
var CommonsChunkPlugin = webpack.optimize.CommonsChunkPlugin;
//压缩混淆插件
var UglifyJsPlugin = webpack.optimize.UglifyJsPlugin;

// const debug = process.env.NODE_ENV !== 'production';
const debug = false;

//获取入口模块对象集合
var getEntry = function (globPath, folderLevel) {
  var files = glob.sync(globPath);
  var entries = {}, entry, moduleName;
  for (var i = 0; i < files.length; i++) {
    entry = files[i];
    moduleName = entry.split('/')[folderLevel];
    entries[moduleName] = './' + entry;
  }
  return entries;
}

var globPath = 'src/**/**/js/index.js';
var entries = getEntry(globPath, 2);
var chunks = Object.keys(entries);

var config = {
  //入口文件输出配置
  entry: entries,
  //入口文件输出配置
  output: {
    path: path.join(__dirname, 'assets'), //输出目录的配置
    // publicPath: './',
    filename: 'js/[name].js',
    chunkFilename: '[id].chunk.js?[chunkhash]',
  },
  module: {
    loaders: [
      {
        test: /\.css$/,
        loader: ExtractTextPlugin.extract('style', 'css')
      },
      {
        test: /\.less$/,
        loader: ExtractTextPlugin.extract('css!less')
      },
      {
        test: /\.html$/,
        loader: "html?-minimize" //避免压缩html,https://github.com/webpack/html-loader/issues/50
      },
      {
        test: /\.(woffwoff2ttfeotsvg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
        loader: 'file-loader?name=fonts/[name].[ext]'
      },
      {
        test: /\.(pngjpe?ggif)$/,
        loader: 'url-loader?limit=8192&name=img/[name]-[hash].[ext]'
      }
    ]
  },
  plugins: [
    new webpack.ProvidePlugin({ //加载zepto
      $: 'zepto'
    }),
    new CommonsChunkPlugin({
      name: 'vendors', // 将公共模块提取,生成名为`vendors`的chunk
      chunks: chunks,
      minChunks: chunks.length // 提取所有entry共同依赖的模块
    }),
    new ExtractTextPlugin('styles/[name].css'), //单独使用link标签加载css并设置路径,相对于output配置中的publickPath
    new UglifyJsPlugin({ //压缩代码
      compress: {
        warnings: false
      },
      except: ['$super', '$', 'exports', 'require', 'App', 'Vue'] //排除关键字
    }),
  ]
}
console.log(__dirname);
var pages = glob.sync('src/**/**/index.html');
pages.forEach(function(page, index) {
  var moduleName = Object.keys(entries)[index];
  var pathname = page.replace(/index.html/g, '');

  var conf = {
    filename: path.resolve(__dirname, 'assets/' + moduleName +'.html'), //生成的html存放路径,相对于path
    template: path.resolve(__dirname, pathname + 'index.html'), //html模板路径
    inject: false, //js插入的位置,true/'head'/'body'/false
    /*
     * 压缩这块,调用了html-minify,会导致压缩时候的很多html语法检查问题,
     * 如在html标签属性上使用{{...}}表达式,很多情况下并不需要在此配置压缩项,
     * 另外,UglifyJsPlugin会在压缩代码的时候连同html一起压缩。
     * 为避免压缩html,需要在html-loader上配置'html?-minimize',见loaders中html-loader的配置。
     */
    minify: { //压缩HTML文件
     removeComments: true, //移除HTML中的注释
     collapseWhitespace: false //删除空白符与换行符
    }
  };
  if (moduleName in config.entry) {
    // conf.favicon = path.resolve(__dirname, 'src/images/favicon.ico');
    conf.inject = 'body';
    conf.chunks = ['vendors', moduleName];
    conf.hash = true;
  }
  config.plugins.push(new HtmlWebpackPlugin(conf));
});

module.exports = config;
点击查看更多内容
13人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
9109
获赞与收藏
2572

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消