67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
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 };
|