zoukankan      html  css  js  c++  java
  • webpack.prod.conf.js

    // 引入依赖模块
    var path = require('path')
    var utils = require('./utils')
    var webpack = require('webpack')
    // 引入基本配置
    var config = require('../config')
    var merge = require('webpack-merge')
    var baseWebpackConfig = require('./webpack.base.conf')
    var HtmlWebpackPlugin = require('html-webpack-plugin')
    
    // 用于从webpack生成的bundle中提取文本到特定文件中的插件
    // 可以抽取出css,js文件将其与webpack输出的bundle分离
    
    var ExtractTextPlugin = require('extract-text-webpack-plugin')
    
    var env = process.env.NODE_ENV === 'testing'
    ? require('../config/test.env')
    : config.build.env
    
    // 合并基础的webpack配置
    var webpackConfig = merge(baseWebpackConfig, {
    module: {
    rules: utils.styleLoaders({
    sourceMap: config.build.productionSourceMap,
    extract: true
    })
    },
    
    devtool: config.build.productionSourceMap ? '#source-map' : false,
    // 配置webpack的输出
    output: {
    // 编译输出目录
    path: config.build.assetsRoot,
    // 编译输出文件名格式
    filename: utils.assetsPath('js/[name].[chunkhash].js'),
    // 没有指定输出名的文件输出的文件名格式
    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
    },
    
    // 配置webpack插件
    
    plugins: [
    // http://vuejs.github.io/vue-loader/en/workflow/production.html
    new webpack.DefinePlugin({
    'process.env': env
    }),
    
    // 丑化压缩代码
    new webpack.optimize.UglifyJsPlugin({
    compress: {
    warnings: false
    },
    sourceMap: true
    }),
    
     
    
    // 抽离css文件
    new ExtractTextPlugin({
    filename: utils.assetsPath('css/[name].[contenthash].css')
    }),
    
     
    
    // generate dist index.html with correct asset hash for caching.
    // you can customize output by editing /index.html
    // see https://github.com/ampedandwired/html-webpack-plugin
    new HtmlWebpackPlugin({
    filename: process.env.NODE_ENV === 'testing'
    
    ? 'index.html'
    : config.build.index,
    template: 'index.html',
    inject: true,
    minify: {
    removeComments: true,
    collapseWhitespace: true,
    removeAttributeQuotes: true
    // more options:
    // https://github.com/kangax/html-minifier#options-quick-reference
    },
    
    // necessary to consistently work with multiple chunks via CommonsChunkPlugin
    chunksSortMode: 'dependency'
    }),
    
    // split vendor js into its own file
    new webpack.optimize.CommonsChunkPlugin({
    name: 'vendor',
    minChunks: function (module, count) {
    // any required modules inside node_modules are extracted to vendor
    
    return (
    module.resource &&
    /.js$/.test(module.resource) &&
    module.resource.indexOf(
    path.join(__dirname, '../node_modules')
    ) === 0
    )
    }
    }),
    // extract webpack runtime and module manifest to its own file in order to
    // prevent vendor hash from being updated whenever app bundle is updated
    
    new webpack.optimize.CommonsChunkPlugin({
    name: 'manifest',
    chunks: ['vendor']
    })
    ]
    })
    
    // gzip模式下需要引入compression插件进行压缩
    if (config.build.productionGzip) {
    var CompressionWebpackPlugin = require('compression-webpack-plugin')
    webpackConfig.plugins.push(
    new CompressionWebpackPlugin({
    asset: '[path].gz[query]',
    algorithm: 'gzip',
    test: new RegExp(
    '\.(' +
    config.build.productionGzipExtensions.join('|') +
    ')$'
    ),
    
    threshold: 10240,
    minRatio: 0.8
    })
    )
    }
    
    if (config.build.bundleAnalyzerReport) {
    var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
    webpackConfig.plugins.push(new BundleAnalyzerPlugin())
    }
    
    module.exports = webpackConfig
  • 相关阅读:
    bash实现多进程运行
    Erlang实现进程池
    Apache 和nginx支持跨域访问
    thinkphp 发送邮件
    判断PC和移动端 判断移动端系统
    check 选择框checked属性读取不到
    php使用PDO,并连接SQL
    SQL2005:由于目标机器积极拒绝,无法连接
    frozenui 移动端ui
    纯jquery 滚动评论
  • 原文地址:https://www.cnblogs.com/moneyss/p/7098648.html
Copyright © 2011-2022 走看看