diff --git a/frontend/package.json b/frontend/package.json index e1759e00..8900a421 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -78,13 +78,14 @@ "style-loader": "^3.3.0", "tailwindcss": "^3.4.1", "terser-webpack-plugin": "^5.3.10", + "thread-loader": "^4.0.4", "ts-loader": "^9.2.6", "tsconfig-paths-webpack-plugin": "^4.1.0", "typescript": "^5.3.3", "update-dotenv": "^1.1.1", "url-pattern": "^1.0.3", - "webpack": "^5.88.0", - "webpack-cli": "^4.8.0", + "webpack": "^5.97.1", + "webpack-cli": "^5.1.4", "webpack-merge": "^5.8.0", "yaml": "^2.0.0-11", "zod": "^3.23.8" @@ -97,6 +98,7 @@ "build": "webpack --config webpack.prod.js", "build-dev": "webpack --mode development", "build:analyze": "BUNDLE_ANALYZER=true webpack --config webpack.prod.js", + "prestart": "webpack --mode development --config vendor.webpack.config.js", "start": "webpack serve --mode=development --config webpack.dev.js", "serve": "node scripts/serve.js", "lint": "eslint --fix .", @@ -120,7 +122,7 @@ "sinon": "^12.0.1", "ts-lit-plugin": "^2.0.1", "webpack-bundle-analyzer": "^4.10.1", - "webpack-dev-server": "^4.15.0" + "webpack-dev-server": "^5.2.0" }, "optionalDependencies": { "@esm-bundle/chai": "^4.3.4-fix.0", diff --git a/frontend/scripts/serve.js b/frontend/scripts/serve.js index efc7126b..d2cfa331 100644 --- a/frontend/scripts/serve.js +++ b/frontend/scripts/serve.js @@ -1,3 +1,4 @@ +// @ts-check // Serve app locally without building with webpack, e.g. for e2e const fs = require("fs"); const path = require("path"); @@ -15,23 +16,36 @@ require("dotenv").config({ path: dotEnvPath, }); -const [devConfig] = require("../webpack.dev.js"); +const devConfigs = require("../webpack.dev.js"); +const [devConfig] = devConfigs; const app = express(); -const { devServer } = devConfig; +/** @type {import('webpack').Configuration['devServer']} */ +const devServer = devConfig.devServer; -devServer.setupMiddlewares([], { app }); +if (!devServer) { + throw new Error("Dev server not defined in `webpack.dev.js`"); +} + +if (devServer.setupMiddlewares) { + // @ts-ignore Express app is compatible with `Server` + devServer.setupMiddlewares([], { app }); +} + +if (Array.isArray(devServer.proxy)) { + devServer.proxy.forEach((proxy) => { + app.use( + // @ts-ignore + proxy.context, + createProxyMiddleware({ + ...proxy, + followRedirects: true, + }), + ); + }); +} -Object.keys(devServer.proxy).forEach((path) => { - app.use( - path, - createProxyMiddleware({ - ...devServer.proxy[path], - followRedirects: true, - }), - ); -}); app.use("/", express.static(distPath)); app.get("/*", (req, res) => { res.sendFile(path.join(distPath, "index.html")); diff --git a/frontend/src/index.ejs b/frontend/src/index.ejs index c411ae8a..314e7618 100644 --- a/frontend/src/index.ejs +++ b/frontend/src/index.ejs @@ -19,6 +19,9 @@ + <%if (environment === "development") { %> + + <% } %>