Cosmos-Server/webpack.config.js
2023-12-02 15:45:10 +02:00

108 lines
3.3 KiB
JavaScript

const { IgnorePlugin } = require('webpack')
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer')
const { DuplicatesPlugin } = require("inspectpack/plugin");
const TerserPlugin = require('terser-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
const path = require('path');
module.exports = {
entry: './client/src/index',
module: {
rules: [
{
test: /\.(ts|tsx|js|jsx|mjs|cjs)$/,
use: {
loader: 'babel-loader',
options: {
cacheCompression: true
}
},
exclude: /node_modules/,
},
{
test: /\.s[ac]ss$/i,
use: [
MiniCssExtractPlugin.loader,
{ loader: 'css-loader', options: { modules: true } },
'sass-loader',
],
},
{
test: /\.css$/i,
use: ['style-loader', { loader: 'css-loader', options: { modules: true } },],
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
loader: 'file-loader',
}
],
},
resolve: {
extensions: ['.*', '.tsx', '.ts', '.jsx', '.js', '.mjs', '.cjs'],
fallback: {
'stream': require.resolve('stream-browserify'),
'crypto': require.resolve('crypto-browserify'),
'path': require.resolve('path-browserify'),
'fs': require.resolve('browserify-fs'),
'buffer': require.resolve('buffer/'),
'util': require.resolve('util/'),
},
alias: {
'bn.js': require.resolve('bn.js')
}
},
plugins: [
new ESLintPlugin(),
new IgnorePlugin({
resourceRegExp: /[\d\D]*.demo[\d\D]*/
}),
new HtmlWebpackPlugin({
template: path.join(__dirname, 'client', 'index.html'),
filename: 'index.[contenthash].html'
}),
new BundleAnalyzerPlugin(),
new DuplicatesPlugin({
emitErrors: false,
verbose: true
})
],
output: {
path: path.resolve(__dirname, 'client/dist'),
},
optimization: {
chunkIds: 'total-size',
moduleIds: 'size',
mergeDuplicateChunks: true,
portableRecords: true,
sideEffects: true,
splitChunks: {
chunks: 'all',
},
minimizer: [
new CssMinimizerPlugin(),
new TerserPlugin({
minify: TerserPlugin.swcMinify,
terserOptions: {
mangle: true,
compress: true,
sourceMap: false,
}
}),
new TerserPlugin({
minify: TerserPlugin.uglifyJsMinify
}),
new TerserPlugin({
minify: TerserPlugin.esbuildMinify
}),
new TerserPlugin({
minify: TerserPlugin.terserMinify
}),
]
}
};