const HtmlWebpackPlugin = require("html-webpack-plugin"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const path = require("path"); const { optimizeImports, OptimizeCssPlugin, } = 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.resolve("node_modules", "svelte/src/runtime"), }, extensions: [".mjs", ".js", ".svelte"], mainFields: ["svelte", "browser", "module", "main"], conditionNames: ["svelte", "browser", "import"], }, 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: { hotReload: !PROD, preprocess: [optimizeImports()], compilerOptions: { dev: !PROD }, }, }, }, { test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"], }, { test: /node_modules\/svelte\/.*\.mjs$/, resolve: { fullySpecified: false }, }, ], }, mode: NODE_ENV, plugins: [ PROD && new OptimizeCssPlugin(), 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 }, };