text: var path = require("path");
  var utils = require("./utils");
  var webpack = require("webpack");
  var config = require("../config");
  var merge = require("webpack-merge");
  var autoprefixer = require("autoprefixer");
  var baseWebpackConfig = require("./webpack.base.config");
  var CopyWebpackPlugin = require("copy-webpack-plugin");
  var HtmlWebpackPlugin = require("html-webpack-plugin");
  var ExtractTextPlugin = require("extract-text-webpack-plugin");
  var OptimizeCSSPlugin = require("optimize-css-assets-webpack-plugin");
  
  var env = config.build.env;
  
  var webpackConfig = merge(baseWebpackConfig, {
    module: {
      rules: [
        {
          test: /\.(css|less)$/,
          use: ExtractTextPlugin.extract(
            Object.assign(
              {
                fallback: require.resolve("style-loader"),
                use: [
                  {
                    loader: require.resolve("css-loader"),
                    options: {
                      importLoaders: 1,
                      minimize: true,
                      sourceMap: true
                    }
                  },
                  {
                    loader: require.resolve("postcss-loader"),
                    options: {
                      // Necessary for external CSS imports to work
                      // https://github.com/facebookincubator/create-react-app/issues/2677
                      ident: "postcss",
                      plugins: () => [
                        require("postcss-flexbugs-fixes"),
                        autoprefixer({
                          browsers: [
                            ">1%",
                            "last 4 versions",
                            "Firefox ESR",
                            "not ie < 9" // React doesn't support IE8 anyway
                          ],
                          flexbox: "no-2009"
                        })
                      ]
                    }
                  }
                ]
              }
              // extractTextPluginOptions
            )
          )
        }
      ]
    },
    devtool: config.build.productionSourceMap ? "#source-map" : false,
    output: {
      path: config.build.assetsRoot,
      filename: utils.assetsPath("js/[name].[chunkhash].js"),
      chunkFilename: utils.assetsPath("js/[id].[chunkhash].js")
    },
    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
      }),
      // extract css into its own file
      new ExtractTextPlugin({
        filename: utils.assetsPath("css/[name].[contenthash].css")
      }),
      // Compress extracted CSS. We are using this plugin so that possible
      // duplicated CSS from different components can be deduped.
      new OptimizeCSSPlugin({
        cssProcessorOptions: {
          safe: true
        }
      }),
      // 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: 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"]
      })
      // copy custom static assets
      // new CopyWebpackPlugin([
      //   {
      //     from: path.resolve(__dirname, '../static'),
      //     to: config.build.assetsSubDirectory,
      //     ignore: ['.*']
      //   }
      // ])
    ]
  });
  
  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;
  