text: 'use strict'
  const path = require('path')
  const utils = require('./utils')
  const config = require('../config')
  const { VueLoaderPlugin } = require('vue-loader')
  
  const os = require('os');
  const HappyPack  = require('happypack');
  const happThreadPool = HappyPack.ThreadPool({size: os.cpus().length});
  
  function resolve(dir) {
    return path.join(__dirname, '..', dir)
  }
  
  // ESLint
  
  const createLintingRule = () => ({
    // test: /\.(js|vue)$/,
    // loader: 'eslint-loader',
    // enforce: 'pre',
    // include: [resolve('src'), resolve('test')],
    // options: {
    //   formatter: require('eslint-friendly-formatter'),
    //   emitWarning: !config.dev.showEslintErrorsInOverlay
    // }
  })
  
  module.exports = {
    cache: true,
    context: path.resolve(__dirname, '../'),
    entry:["babel-polyfill","./src/main.js"],
    output: {
      path: config.build.assetsRoot,
      filename: '[name].js',
      publicPath:
        process.env.NODE_ENV === 'production'
          ? config.build.assetsPublicPath
          : config.dev.assetsPublicPath
    },
    resolve: {
      modules: [path.resolve(__dirname, '../node_modules')],
      extensions: ['.js', '.vue', '.json'],
      alias: {
        '@': resolve('src'),
        api: path.resolve(__dirname, '../src/api')
      }
    },
    module: {
      rules: [
        ...(config.dev.useEslint ? [createLintingRule()] : []),
        {
          test: /\.vue$/,
          loader: 'vue-loader',
          options: {
            loaders: {
              js: 'happypack/loader?id=js' // 将loader换成happypack
            }
          }
        },
        {
          test: /\.js$/,
          loader: ['happypack/loader?id=js'], // 将loader换成happypack
          include: [
            resolve('src')
          ], // src是项目开发的目录
          exclude: [path.resolve('../node_modules')] // 不需要编译node_modules下的js
        },
        {
          test: /\.svg$/,
          loader: 'svg-sprite-loader',
          include: [resolve('src/icons')],
          options: {
            symbolId: 'icon-[name]'
          }
        },
        {
          test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
          loader: 'url-loader',
          exclude: [resolve('src/icons')],
          options: {
            limit: 10000,
            name: utils.assetsPath('img/[name].[hash:7].[ext]')
          }
        },
        {
          test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
          loader: 'url-loader',
          options: {
            limit: 10000,
            name: utils.assetsPath('media/[name].[hash:7].[ext]')
          }
        },
        {
          test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
          loader: 'url-loader',
          options: {
            limit: 10000,
            name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
          }
        }
      ]
    },
    plugins: [
      new VueLoaderPlugin(),
      new HappyPack({
        id: 'js',
        cache: true,
        loaders: ['babel-loader?cacheDirectory=true'],
        threadPool: happThreadPool
      })
    ],
    node: {
      // prevent webpack from injecting useless setImmediate polyfill because Vue
      // source contains it (although only uses it if it's native).
      setImmediate: false,
      // prevent webpack from injecting mocks to Node native modules
      // that does not make sense for the client
      dgram: 'empty',
      fs: 'empty',
      net: 'empty',
      tls: 'empty',
      child_process: 'empty'
    }
  }
  