require('ts-node/register'); const path = require('path'); const webpack = require('webpack'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const HtmlWebPackPlugin = require('html-webpack-plugin'); const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); const __basedir = path.resolve(__dirname, '..'); module.exports = (env, args, myEnv) => ({ entry: { app: [path.resolve(__basedir, 'src/index.tsx')], style: [path.resolve(__basedir, 'src/styles/global.css')], }, output: { path: path.resolve(__basedir, 'build'), publicPath: '/', }, resolve: { alias: { api: path.resolve(__basedir, 'src/api'), app: path.resolve(__basedir, 'src/app'), components: path.resolve(__basedir, 'src/components'), constants: path.resolve(__basedir, 'src/constants'), features: path.resolve(__basedir, 'src/features'), hooks: path.resolve(__basedir, 'src/hooks'), localization: path.resolve(__basedir, 'src/localization'), pages: path.resolve(__basedir, 'src/pages'), utils: path.resolve(__basedir, 'src/utils'), types: path.resolve(__basedir, 'src/types'), }, extensions: ['.ts', '.tsx', '.js', '.json'], }, module: { rules: [ { test: /\.tsx?$/, loader: 'ts-loader', }, { test: /\.css$/i, use: [ MiniCssExtractPlugin.loader, 'css-loader', { loader: 'postcss-loader', options: { postcssOptions: { config: path.resolve(__basedir, 'src/styles/postcss.config.js'), }, }, }, ], }, ], }, plugins: [ new MiniCssExtractPlugin({ filename: '[name].css', }), new HtmlWebPackPlugin({ hash: true, filename: 'index.html', //target html template: path.resolve(__basedir, 'src/app/assets/html/index.ejs'), //source html env: { websiteId: process.env.WA_WEBSITE_ID, }, }), new CopyPlugin({ patterns: [ { from: path.resolve(__basedir, 'src/app/assets/public'), to: './' }, ], }), new webpack.EnvironmentPlugin(myEnv), new webpack.ProvidePlugin({ process: 'process/browser', }), new CaseSensitivePathsPlugin(), ], });