const CopyWebpackPlugin = require("copy-webpack-plugin"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const miniCssExtractPlugin = require("mini-css-extract-plugin"); const { SourceMap } = require("module"); const path = require("path"); module.exports = { entry: "./src/js/main.ts", output: { path: path.resolve(__dirname, "dist"), filename: "main.js", clean: true, }, devServer: { static: path.resolve(__dirname, "dist"), port: 8080, hot: true, }, mode: "development", devtool: "eval-source-map", plugins: [ new CopyWebpackPlugin({ patterns: [ "img/*.png", "img/*/*.png", { from: "data/database.json", to: "data" }, // Copy Shoelace assets to dist/shoelace { from: path.resolve( __dirname, "node_modules/@shoelace-style/shoelace/dist/assets", ), to: path.resolve(__dirname, "dist/shoelace/assets"), }, ], }), new HtmlWebpackPlugin({ template: "./src/index.html" }), new miniCssExtractPlugin(), ], module: { rules: [ { test: /\.tsx?$/, use: "ts-loader", exclude: /node_modules/, }, { test: /\.(jpg|png|svg|gif)$/, type: "asset/resource", }, { test: /\.css|\.s(c|a)ss$/, use: [ { // inject CSS to page loader: miniCssExtractPlugin.loader, }, { // translates CSS into CommonJS modules loader: "css-loader", options: { sourceMap: true, }, }, { // Run postcss actions loader: "postcss-loader", options: { // `postcssOptions` is needed for postcss 8.x; // if you use postcss 7.x skip the key postcssOptions: { // postcss plugins, can be exported to postcss.config.js plugins: function () { return [require("autoprefixer")]; }, }, }, }, { // compiles Sass to CSS loader: "sass-loader", options: { sourceMap: true, }, }, ], // parser: { // javascript : { importMeta: false } // } }, ], }, resolve: { extensions: [".tsx", ".ts", ".js", ".json"], fallback: { crypto: require.resolve("crypto-browserify"), buffer: require.resolve("buffer"), stream: require.resolve("stream-browserify"), vm: require.resolve("vm-browserify"), }, }, experiments: { asyncWebAssembly: true, syncWebAssembly: true, }, watchOptions: { aggregateTimeout: 200, poll: 200, }, };