110 lines
2.9 KiB
JavaScript
110 lines
2.9 KiB
JavaScript
// import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
|
|
import HtmlWebpackPlugin from 'html-webpack-plugin'
|
|
import webpack from 'webpack'
|
|
import { fileURLToPath } from 'url'
|
|
import { dirname } from 'path'
|
|
|
|
const __filename = fileURLToPath(import.meta.url)
|
|
const __dirname = dirname(__filename)
|
|
|
|
const isDevelopment = process.env.NODE_ENV !== 'production'
|
|
|
|
export default {
|
|
entry: {
|
|
app: './src/index.tsx',
|
|
bugtracking: './src/utils/bugtracking.ts',
|
|
},
|
|
output: {
|
|
chunkFilename: isDevelopment ? '[name].js' : '[name].[contenthash:8].js',
|
|
filename: isDevelopment ? '[name].bundle.js' : '[name].[contenthash:8].bundle.js',
|
|
path: `${__dirname}/build`,
|
|
pathinfo: false,
|
|
},
|
|
optimization: {
|
|
minimize: !isDevelopment,
|
|
removeAvailableModules: false,
|
|
removeEmptyChunks: false,
|
|
runtimeChunk: isDevelopment ? false : 'single',
|
|
splitChunks: isDevelopment ? false : {
|
|
chunks: 'all',
|
|
minSize: 30000,
|
|
minChunks: 1,
|
|
maxAsyncRequests: 5,
|
|
maxInitialRequests: 3,
|
|
automaticNameDelimiter: '~',
|
|
cacheGroups: {
|
|
vendors: {
|
|
test: /[\\/]node_modules[\\/](react|react-dom|@material-ui|popper\.js|react|react-redux|prop-types|jss|redux|scheduler|react-transition-group)[\\/]/,
|
|
name: 'vendors',
|
|
chunks: 'all',
|
|
priority: -10,
|
|
},
|
|
default: {
|
|
name: 'default',
|
|
minChunks: 2,
|
|
priority: -20,
|
|
reuseExistingChunk: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
devServer: {
|
|
hot: true,
|
|
liveReload: false,
|
|
},
|
|
target: 'electron-renderer',
|
|
mode: isDevelopment ? 'development' : 'production',
|
|
devtool: isDevelopment ? 'eval-cheap-module-source-map' : 'source-map',
|
|
resolve: {
|
|
extensions: ['.ts', '.mjs', '.m.js', '.tsx', '.js', '.json', '.node'],
|
|
},
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.tsx?$/,
|
|
use: [
|
|
{
|
|
loader: 'ts-loader',
|
|
options: {
|
|
transpileOnly: true,
|
|
experimentalWatchApi: true,
|
|
},
|
|
},
|
|
],
|
|
exclude: /node_modules/,
|
|
},
|
|
...(isDevelopment ? [] : [{
|
|
enforce: 'pre',
|
|
test: /\.js$/,
|
|
loader: 'source-map-loader',
|
|
exclude: /node_modules\/ace-builds/,
|
|
}]),
|
|
{
|
|
test: /\.css$/,
|
|
use: ['style-loader', 'css-loader'],
|
|
},
|
|
{
|
|
test: /\.(png|jpg|gif)$/i,
|
|
type: 'asset/resource',
|
|
},
|
|
],
|
|
},
|
|
plugins: [
|
|
new HtmlWebpackPlugin({ template: './index.html', file: './build/index.html', inject: false }),
|
|
new webpack.DefinePlugin({
|
|
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
|
|
}),
|
|
],
|
|
externals: {},
|
|
cache: {
|
|
type: 'filesystem',
|
|
buildDependencies: {
|
|
config: [__filename],
|
|
},
|
|
},
|
|
performance: {
|
|
hints: isDevelopment ? false : 'warning',
|
|
},
|
|
stats: isDevelopment ? 'errors-warnings' : 'normal',
|
|
}
|