/* eslint-disable import/no-extraneous-dependencies */ const { ProgressPlugin, EnvironmentPlugin } = require('webpack'); const convert = require('koa-connect'); const history = require('connect-history-api-fallback'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const commonPaths = require('./paths'); const Environment = require('./Environment'); module.exports = { mode: Environment[process.env.NODE_ENV], entry: commonPaths.entryPath, module: { rules: [ { test: /\.(js|jsx)$/, loader: 'babel-loader', exclude: /(node_modules)/, options: { presets: ['@babel/preset-env'], }, }, { enforce: 'pre', test: /\.(js|jsx)$/, loader: 'eslint-loader', exclude: /(node_modules)/, options: { // emitWarning: process.env.NODE_ENV !== Environment.production, emitWarning: true, }, }, { test: /\.(png|jpg|gif|svg)$/, use: [ { loader: 'file-loader', options: { outputPath: commonPaths.imagesFolder, }, }, ], }, { test: /\.(woff2|ttf|woff|eot)$/, use: [ { loader: 'file-loader', options: { outputPath: commonPaths.fontsFolder, }, }, ], }, ], }, serve: { add: (app) => { app.use(convert(history())); }, content: commonPaths.entryPath, dev: { publicPath: commonPaths.outputPath, }, open: false, }, resolve: { modules: ['src', 'node_modules'], extensions: ['*', '.js', '.jsx', '.css', '.scss'], }, plugins: [ new EnvironmentPlugin(['NODE_ENV', 'API_BASE_PATH']), new ProgressPlugin(), new HtmlWebpackPlugin({ template: commonPaths.templatePath, }), new ScriptExtHtmlWebpackPlugin({ defaultAttribute: 'async', }), new CopyWebpackPlugin({ patterns: [{ from: commonPaths.assetOriginPath, to: commonPaths.assetPath, }], }), ], };