Cosmos-Server/webpack.common.js

94 lines
3.2 KiB
JavaScript

const { DuplicatesPlugin } = require("inspectpack/plugin")
const { DefinePlugin } = require("webpack")
const { join } = require("path")
const StatoscopeWebpackPlugin = require('@statoscope/webpack-plugin').default
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
const HtmlWebpackPlugin = require("html-webpack-plugin")
const demo = !!process.env.demo
const withReport = !!process.env.withReport
const analyzeDeps = !!process.env.analyzeDeps
module.exports = {
entry: join(__dirname, "client/src/index"),
output: {
path: join(__dirname, "static"),
clean: true
},
plugins: [
new MiniCssExtractPlugin(),
new HtmlWebpackPlugin({
baseUrl: "/cosmos-ui/",
template: "client/index.html",
inject: true,
minify: true
}),
new DefinePlugin({
"process.env.MODE": JSON.stringify(demo ? "demo" : "production")
})
].concat(withReport ? [new StatoscopeWebpackPlugin()] : [])
.concat(analyzeDeps ? [new DuplicatesPlugin({ emitErrors: true, verbose: true })] : []),
module: {
rules: [
{
test: /\.(ts|js|mjs|cjs)x?$/i,
use: ["babel-loader"],
exclude: /node_modules/,
},
{
test: /\.s[ac]ss$/i,
use: [
"sass-loader",
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
importLoaders: 1,
modules: true
}
}
],
},
{
test: /\.css$/i,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
importLoaders: 1,
modules: true
}
},
],
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
type: "asset/resource",
}
],
},
resolve: {
extensions: [".*", ".tsx", ".ts", ".mts", ".jsx", ".js", ".mjs"],
fallback: {
"stream": require.resolve("stream-browserify"),
"crypto": require.resolve("crypto-browserify"),
"path": require.resolve("path-browserify"),
"buffer": require.resolve("buffer/"),
"util": require.resolve("util/"),
"fs": false
},
alias: {
"bn.js": require.resolve("bn.js"),
"isarray": require.resolve("isarray"),
"level-fix-range": require.resolve("level-fix-range"),
"object-keys": require.resolve("object-keys"),
"prr": require.resolve("prr"),
"react-is": require.resolve("react-is"),
"safe-buffer": require.resolve("safe-buffer"),
"string_decoder": require.resolve("string_decoder"),
"xtend": require.resolve("xtend"),
"framer-motion": require.resolve("framer-motion")
}
}
}