const { ESBuildMinifyPlugin } = require("esbuild-loader"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const path = require("path"); const { optimizeImports } = require("carbon-preprocess-svelte"); const NODE_ENV = process.env.NODE_ENV || "development"; const PROD = NODE_ENV === "production"; module.exports = { entry: { "build/bundle": ["./src/index.js"] }, resolve: { alias: { svelte: path.dirname(require.resolve("svelte/package.json")) }, extensions: [".mjs", ".js", ".svelte"], mainFields: ["svelte", "browser", "module", "main"], }, output: { publicPath: "/", path: path.join(__dirname, "/public"), filename: PROD ? "[name].[contenthash].js" : "[name].js", chunkFilename: "[name].[id].js", clean: true, }, module: { rules: [ { test: /\.svelte$/, use: { loader: "svelte-loader", options: { preprocess: [optimizeImports()], hotReload: !PROD, compilerOptions: { dev: !PROD }, }, }, }, { test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /node_modules\/svelte\/.*\.mjs$/, resolve: { fullySpecified: false }, }, ], }, mode: NODE_ENV, plugins: [ new MiniCssExtractPlugin({ filename: PROD ? "[name].[chunkhash].css" : "[name].css", }), new HtmlWebpackPlugin({ templateContent: `
`, }), ], stats: "errors-only", devtool: PROD ? false : "source-map", devServer: { hot: true, historyApiFallback: true }, optimization: { minimizer: [new ESBuildMinifyPlugin({ target: "es2015" })], }, };