const path = require("path"); const HtmlWebPackPlugin = require("html-webpack-plugin"); const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); const isDevelopment = process.env.NODE_ENV !== 'production'; module.exports = { mode: "development", entry: { app: "./src/index.tsx", "editor.worker": "monaco-editor/esm/vs/editor/editor.worker.js", "json.worker": "monaco-editor/esm/vs/language/json/json.worker", "css.worker": "monaco-editor/esm/vs/language/css/css.worker", "html.worker": "monaco-editor/esm/vs/language/html/html.worker", "ts.worker": "monaco-editor/esm/vs/language/typescript/ts.worker" }, devServer: { hot: true }, resolve: { extensions: ['*', '.js', '.jsx', '.tsx', '.ts'] }, output: { globalObject: "self", filename: "[name].bundle.js", path: path.resolve(__dirname, "dist") }, module: { rules: [ { test: /\.(js|jsx|tsx|ts)$/, exclude: /node_modules/, use: [ { loader: require.resolve('babel-loader'), options: { presets: [ "@babel/preset-env", "@babel/preset-typescript", "@babel/preset-react" ], plugins: [isDevelopment && require.resolve('react-refresh/babel')].filter(Boolean), } } ] }, { test: /\.css$/, use: ["style-loader", "css-loader"] }, { test: /\.ttf$/, use: ['file-loader'] } ] }, plugins: [ new HtmlWebPackPlugin({ template: 'src/index.html' }), isDevelopment && new ReactRefreshWebpackPlugin(), ].filter(Boolean) };