webpack.base.config.js 2.8 KB
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const fs = require('fs');

const entry = {};
const plugins = [];
fs
  .readdirSync(path.join(__dirname, './src/views'))
  .forEach(file => {
    entry[file] = `./src/views/${file}/index.js`;
    plugins.push(new HtmlWebpackPlugin({
      filename: `${file}.html`,
      template: './src/template/index.ejs',
      inject: true,
      chunks: ['vendors', file],
      externalscripts: ["https://cdn.yoho.cn/20190712/vue.min.js", 'https://cdn.yoho.cn/20190712/iview.min.js'],
      xlsScript:'https://cdn.yoho.cn/20190712/xlsx.full.min.js',
    }));
  });

module.exports = {
  entry,
  output: {
    path: path.join(__dirname, './dist')
  },
  externals: {
    vue: 'Vue',
    iview: 'iview',
    xlsx: 'XLSX'
  },
  module: {
    rules: [{
      test: /.vue$/,
      use: [{
        loader: 'vue-loader',
        options: {
          loaders: {
            sass: ExtractTextPlugin.extract({
              use: ['css-loader?minimize', 'autoprefixer-loader', 'sass-loader'],
              fallback: 'vue-style-loader'
            }),
            css: ExtractTextPlugin.extract({
              use: ['css-loader', 'autoprefixer-loader', 'sass-loader'],
              fallback: 'vue-style-loader'
            })
          }
        }
      },
      {
        loader: 'iview-loader',
        options: {
          prefix: true
        }
      }
      ]
    },
        // {
        //     test: /iview\/.*?js$/,
        //     loader: 'babel-loader',
        // },
    {
      test: /\.js$/,
      loader: 'babel-loader',
      exclude: /node_modules/
    },
    {
      test: /\.css$/,
      use: ExtractTextPlugin.extract({
        use: ['css-loader?minimize', 'autoprefixer-loader'],
        fallback: 'style-loader'
      })
    },

    {
      test: /\.scss/,
      use: ExtractTextPlugin.extract({
        use: ['css-loader', 'autoprefixer-loader', 'sass-loader'],
        fallback: 'style-loader'
      })
    },
    {
      test: /\.(png|jpe?g|gif)(\?.*)?$/,
      loader: 'url-loader',
      options: {
        limit: 10000,
        name: 'img/[name].[hash:7].[ext]'
      }
    },
    {
      test: /\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/,
      loader: 'url-loader',
      options: {
        limit: 10000,
        name: 'fonts/[name].[hash:7].[ext]',
        publicPath: '../'
      }
    },
    {
      test: /\.(html|tpl)$/,
      loader: 'html-loader'
    }
    ]
  },
  resolve: {
    extensions: ['.js', '.vue'],
    modules: [
      path.join(__dirname, './src'),
      'node_modules'
    ],
    alias: {
      '@': path.join(process.cwd(), 'src'),
      'components': path.join(process.cwd(), 'src/components'),
      'assets': path.join(process.cwd(), 'src/assets')
    }
  },
    plugins: [...plugins]

};