var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');

const PATHS = {
    app: path.join(__dirname, 'client/src'),
    build: path.join(__dirname, 'client/build')
};

module.exports = {
    mode: "production",
    entry: {
        app: ["babel-polyfill", PATHS.app]
    },
    output: {
        path: PATHS.build,
        publicPath: '/build',
        filename: '[name].[hash:5].js'
    },
    resolve: {
        modules: [path.resolve(__dirname, 'client/src'), path.resolve(__dirname, 'node_modules')],
        extensions: ['.js', '.jsx'],
        alias: {
            crypto: false,
            $utils: path.resolve(__dirname, 'client/src/utils/'),
            $components: path.resolve(__dirname, 'client/src/components/'),
        }
    },
    plugins: [
        new HtmlWebpackPlugin({
            filename: '../index.html',
            template: './client/index.ejs'
        })
    ],
    optimization: {
        splitChunks: {
            cacheGroups: {
                commons: {
                    test: /[\\/]node_modules[\\/]/,
                    name: "vendors",
                    chunks: "all"
                }
            }
        }
    },
    module: {
        rules: [{
            test: /\.css$/,
            use: ['style-loader', {
                loader: 'css-loader',
                options: {
                    modules: true
                }
            }]
        },
        {
            test: /\.less$/,
            use: ['style-loader', 'css-loader',
                {
                    loader: 'less-loader', options: {
                        lessOptions: {
                            javascriptEnabled: true
                        }
                    }
                }]
        },
        {
            test: /\.jsx?$/,
            use: 'babel-loader',
            include: [PATHS.app, path.resolve(__dirname, 'node_modules', '@peace')],
        },{
            test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/,
            loader: "file-loader"
        }]
    }
};