text: 'use strict'
  const path = require('path')
  const utils = require('./utils')
  const webpack = require('webpack')
  const config = require('../config')
  const merge = require('webpack-merge')
  const baseWebpackConfig = require('./webpack.base.conf')
  const CopyWebpackPlugin = require('copy-webpack-plugin')
  const HtmlWebpackPlugin = require('html-webpack-plugin')
  const ExtractTextPlugin = require('extract-text-webpack-plugin')
  const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
  const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
  
  const env = require('../config/prod.env')
  
  const webpackConfig = merge(baseWebpackConfig, {
    module: {
      rules: utils.styleLoaders({
        sourceMap: config.build.productionSourceMap,
        extract: true,
        usePostCSS: true
      })
    },
    devtool: config.build.productionSourceMap ? config.build.devtool : false,
  
    entry: {
      app: './src/lib/index.js'
    },
  
    output: {
      path: config.bundle.assetsRoot,
      publicPath: config.bundle.assetsPublicPath,
      filename: 'cx-easy-form.min.js',
      library: 'CxEasyForm',
      libraryTarget: 'umd'
    },
  
    // 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 UglifyJsPlugin({
        uglifyOptions: {
          compress: {
            warnings: false
          }
        },
        sourceMap: config.build.productionSourceMap,
        parallel: true
      }),
      // extract css into its own file
      new ExtractTextPlugin({
        filename: 'cx-easy-form.min.css'
        // filename: utils.assetsPath('css/[name].[contenthash].css'),
  
        // Setting the following option to `false` will not extract CSS from codesplit chunks.
        // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
        // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
        // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
  
        // allChunks: true,
      }),
      // Compress extracted CSS. We are using this plugin so that possible
      // duplicated CSS from different package can be deduped.
      new OptimizeCSSPlugin({
        cssProcessorOptions: config.build.productionSourceMap
          ? { safe: true, map: { inline: false } }
          : { 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'
      // }),
      // // keep module.id stable when vendor modules does not change
      // new webpack.HashedModuleIdsPlugin(),
      // // enable scope hoisting
      // new webpack.optimize.ModuleConcatenationPlugin(),
      // // split vendor js into its own file
      // new webpack.optimize.CommonsChunkPlugin({
      //   name: 'vendor',
      //   minChunks (module) {
      //     // 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',
      //   minChunks: Infinity
      // }),
      // // This instance extracts shared chunks from code splitted chunks and bundles them
      // // in a separate chunk, similar to the vendor chunk
      // // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
      // new webpack.optimize.CommonsChunkPlugin({
      //   name: 'app',
      //   async: 'vendor-async',
      //   children: true,
      //   minChunks: 3
      // }),
      //
      // // copy custom static assets
      // new CopyWebpackPlugin([
      //   {
      //     from: path.resolve(__dirname, '../static'),
      //     to: config.build.assetsSubDirectory,
      //     ignore: ['.*']
      //   }
      // ])
      //
      //===============================================================
    ]
  })
  
  // if (config.build.productionGzip) {
  //   const 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) {
  //   const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
  //   webpackConfig.plugins.push(new BundleAnalyzerPlugin())
  // }
  
  
  module.exports = webpackConfig
  