text: var fs = require('fs');
  var path = require('path');
  var webpack = require('webpack');
  var UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  var CopyWebpackPlugin = require('copy-webpack-plugin');
  
  var src = path.resolve(__dirname, './src');
  var dist = path.resolve(__dirname, './dist');
  var lib = path.resolve(__dirname, '../src/main.js');
  
  function resolve (path) {
    return src + '/' + (path || '');
  }
  
  module.exports = {
    entry: './src/main.js',
    output: {
      path: dist,
      publicPath: '',
      filename: 'build.js'
    },
    module: {
      rules: [
        {
          test: /\.txt$/,
          use: 'raw-loader'
        },
        {
          test: /\.css$/,
          use: [
            'vue-style-loader',
            'css-loader'
          ],
        },
        {
          test: /\.scss$/,
          use: [
            'vue-style-loader',
            'css-loader',
            'sass-loader'
          ],
        },
        {
          test: /\.sass$/,
          use: [
            'vue-style-loader',
            'css-loader',
            'sass-loader?indentedSyntax'
          ],
        },
        {
          test: /\.vue$/,
          loader: 'vue-loader',
          options: {
            loaders: {
              // Since sass-loader (weirdly) has SCSS as its default parse mode, we map
              // the "scss" and "sass" values for the lang attribute to the right configs here.
              // other preprocessors should work out of the box, no loader config like this necessary.
              'scss': [
                'vue-style-loader',
                'css-loader',
                'sass-loader'
              ],
              'sass': [
                'vue-style-loader',
                'css-loader',
                'sass-loader?indentedSyntax'
              ]
            }
            // other vue-loader options go here
          }
        },
        {
          test: /\.js$/,
          loader: 'babel-loader',
          exclude: /node_modules/
        },
        {
          test: /\.(png|jpg|gif|svg)$/,
          loader: 'file-loader',
          options: {
            name: '[name].[ext]?[hash]'
          }
        },
        {
          test: /\.md$/,
          loader: 'vue-markdown-loader',
          options: {
            wrapper: 'markdown-page',
          }
        }
      ]
    },
    resolve: {
      alias: {
        '@': resolve(''),
        'vue$': 'vue/dist/vue.esm.js',
      },
      extensions: ['*', '.js', '.vue', '.json']
    },
    devServer: {
      historyApiFallback: true,
      noInfo: true,
      overlay: true
    },
    performance: {
      hints: false
    },
    devtool: '#eval-source-map'
  };
  
  if (fs.existsSync(lib)) {
    module.exports.resolve.alias['@fk/fai-dnd-vue'] = lib;
  }
  
  if (process.env.NODE_ENV === 'production') {
    module.exports.devtool = '#source-map';
    // http://vue-loader.vuejs.org/en/workflow/production.html
    module.exports.plugins = (module.exports.plugins || []).concat([
      new CopyWebpackPlugin(['index.html'], { from: './', to: dist }),
      new webpack.DefinePlugin({
        'process.env': {
          NODE_ENV: '"production"'
        }
      }),
      new UglifyJsPlugin({
        sourceMap: true,
        uglifyOptions: {
          warnings: false
        }
      }),
      new webpack.LoaderOptionsPlugin({
        minimize: true
      })
    ]);
  }
  