import ReactRefreshWebpackPlugin from "@pmmmwh/react-refresh-webpack-plugin"; import CopyPlugin from "copy-webpack-plugin"; import Dotenv from "dotenv-webpack"; import ESLintPlugin from "eslint-webpack-plugin"; import ForkTsCheckerWebpackPlugin from "fork-ts-checker-webpack-plugin"; import HtmlWebpackPlugin from "html-webpack-plugin"; import { join } from "path"; import { ProgressPlugin } from "webpack"; import config, { EnvironmentConfig } from "../config"; const basePlugins = [ new HtmlWebpackPlugin({ publicPath: "/", template: join(config.webpack.rootDir, "src/index.html"), }), new ForkTsCheckerWebpackPlugin({ typescript: { configFile: join(config.webpack.rootDir, "tsconfig.json"), mode: "write-references", }, }), new ESLintPlugin({ context: join(config.webpack.rootDir, "src"), extensions: ["ts", "tsx"], failOnError: !config.isDev, lintDirtyModulesOnly: true, }), new CopyPlugin({ patterns: [ { from: join(config.webpack.rootDir, "src/assets"), to: "assets", globOptions: { dot: false, ignore: ["**/*.tsx", "**/*.ico"], }, noErrorOnMissing: true, }, ], }), new Dotenv({ path: (() => { let path = "./.env"; if (config.isProd) { path = "./.env.production"; } else if (config.isPrelive) { path = "./.env.prelive"; } else if (config.isNonprod) { path = "./.env.nonprod"; } console.log(`Using '${path}' for build variables.`) return path; })(), }), ]; const devPlugins = [ new ProgressPlugin(), !config.isProd && new ReactRefreshWebpackPlugin({ overlay: false, }), ].filter((_) => _); export { basePlugins, devPlugins };