const path = require('path'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); const PnpWebpackPlugin = require('pnp-webpack-plugin'); const { commonRules, htmlCommonConfig } = require('./webpack.common'); const config = { entry: ['./src/index.tsx'], mode: 'production', devtool: 'source-map', module: { rules: [ ...commonRules, { test: /\.(js|jsx|ts|tsx)$/, exclude: /node_modules/, loader: 'babel-loader', }, ], }, resolve: { extensions: ['*', '.js', '.jsx', '.ts', '.tsx'], plugins: [PnpWebpackPlugin], }, resolveLoader: { plugins: [PnpWebpackPlugin.moduleLoader(module)], }, optimization: { runtimeChunk: 'single', splitChunks: { chunks: 'all', cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all', }, }, }, }, output: { path: path.resolve(__dirname, 'dist/'), filename: '[name].[hash].js', chunkFilename: '[name].[hash].js', publicPath: '/', }, plugins: [ new CleanWebpackPlugin(), new HtmlWebpackPlugin(htmlCommonConfig), new ForkTsCheckerWebpackPlugin(), new CopyPlugin({ patterns: [ { from: path.resolve(__dirname, 'public/'), to: path.resolve(__dirname, 'dist/'), }, ], }), ], }; module.exports = config;