webpack.base.config.js 3.04 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]
    }))
  });

module.exports = {
    entry,
    output: {
        path: path.join(__dirname, './dist')
    },
    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: /\.(gif|jpg|png|woff|svg|eot|ttf)\??.*$/,
                loader: 'url-loader?limit=1024'
            },
            {
                test: /\.(html|tpl)$/,
                loader: 'html-loader'
            }
        ]
    },
    resolve: {
        extensions: ['.js', '.vue'],
        modules: [
            path.join(__dirname, './src'),
            'node_modules'
        ],
        alias: {
            'vue': 'vue/dist/vue.esm.js',
            '@': path.join(process.cwd() ,'src'),
            'components': path.join(process.cwd() ,'src/components'),
            'assets': path.join(process.cwd(), 'src/assets')
        }
    },
    plugins: plugins
};