
//Утилита path используется для корретного полного пути к проекту
const path = require('path');


module.exports = {

    //Генерация карты. Более подробная информация при отладке ошибок
    devtool: 'source-map',

    //Точка входа (index.js)
    entry: {
        app: "./src/JS/index.js"
    },    

    //Сборка
    output: {
        //Имя сборки
        //[name] - название точки входа (app__bundle.js)
        filename: "[name]_bundle.js",
        //Физическое размещение
        path: path.resolve(__dirname, "./SPA_Build"),
        //Путь на dev сервере
        publicPath: "/SPA_Build"
    },

    //Дополнительная обработка файлов в процессе сборки
    module: {
        //Правила обработки
        rules: [
            //Обработка js
            {
                //Фильтр файлов. Регулярка. По расширению
                test: /\.js$/,
                //Тип обработки (из пакета)
                loader: 'babel-loader',
                //Искллючить из обработки файлы из папки node_modules (т.к. они уже скомпилированы)
                exclude: ['/node_modules/', '/Enviroment']
            },
            //Конфигурация
            {
                //Фильтр файлов. Регулярка. По расширению
                test: /\.js$/,
                //Тип обработки (из пакета)
                loader: 'babel-loader',
                //Искллючить из обработки файлы из папки node_modules (т.к. они уже скомпилированы)
                exclude: ['/node_modules/', '/src']
            },
            //Обработка jsx
            {
                // определяем тип файлов
                test: /\.jsx?$/, 
                exclude: /(node_modules)/,
                // определяем загрузчик
                loader: "babel-loader"
            },
            //обработка CSS
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            },
            //Обработка изображений
            {
                test: /\.(png|jpe?g|gif)$/i,
                loader: 'file-loader',
                options: {
                    //Сохраняет относительный путь к файлам
                    name: '[path][name].[ext]',
                    //Указывает какую папку выбрать в качестве корня для [path]
                    //Если его не будет то путь будет build/src/...
                    context: 'src',
                    //Заменяет public имя у ссылок
                    publicPath: 'SPA_Build'
                }
            }
        ]
    },

    //Парамтеры dev сервера
    devServer: {
        
        port: 8091,
        //Выводить ошибки в браузер
        overlay: true,
        //Начальная страница
        //openPage: 'SPA_Build/index.html',
        //SPA route. Возвращать index если файл маршрута не найден
        historyApiFallback: {
            index: 'index.html'
        },

        proxy: {            

            //Адрес WevAPI
            '/api/*': {
                target: 'http://localhost:47780'
            }
        }
    }

}