From 04aa899e507de7b483f0616dca61a08b470f5ab6 Mon Sep 17 00:00:00 2001
From: Miroslav Vdoviak <miroslav.vdoviak@emplifi.io>
Date: Sun, 24 Mar 2024 13:35:27 +0100
Subject: [PATCH] =?UTF-8?q?[issue=20#11168]=20[web]=20p=C5=99=C3=ADprava?=
 =?UTF-8?q?=20webu=20pro=20production=20prost=C5=99ed=C3=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitignore            |  6 ++++-
 package-lock.json     | 55 ++++++++++++++++++++++++++++++++++++++++++-
 package.json          | 10 ++++----
 src/server/server.ts  |  4 +++-
 webpack.config.dev.ts | 28 ++++------------------
 webpack.config.ts     | 34 ++++++++++++++++++++++++++
 6 files changed, 107 insertions(+), 30 deletions(-)
 create mode 100644 webpack.config.ts

diff --git a/.gitignore b/.gitignore
index 3a87d75..423d5a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,8 @@ node_modules
 
 dist
 
-.env
\ No newline at end of file
+.env
+
+.vscode
+
+dist
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 3637069..aaceb22 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,7 @@
 			},
 			"devDependencies": {
 				"@babel/core": "^7.24.3",
+				"@babel/plugin-transform-runtime": "^7.24.3",
 				"@babel/preset-env": "^7.24.3",
 				"@babel/preset-react": "^7.24.1",
 				"@babel/preset-typescript": "^7.24.1",
@@ -44,7 +45,8 @@
 				"webpack": "^5.91.0",
 				"webpack-cli": "^5.1.4",
 				"webpack-dev-server": "^5.0.4",
-				"webpack-hot-middleware": "^2.26.1"
+				"webpack-hot-middleware": "^2.26.1",
+				"webpack-merge": "^5.10.0"
 			}
 		},
 		"node_modules/@aashutoshrathi/word-wrap": {
@@ -1670,6 +1672,35 @@
 				"@babel/core": "^7.0.0-0"
 			}
 		},
+		"node_modules/@babel/plugin-transform-runtime": {
+			"version": "7.24.3",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz",
+			"integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==",
+			"dev": true,
+			"dependencies": {
+				"@babel/helper-module-imports": "^7.24.3",
+				"@babel/helper-plugin-utils": "^7.24.0",
+				"babel-plugin-polyfill-corejs2": "^0.4.10",
+				"babel-plugin-polyfill-corejs3": "^0.10.1",
+				"babel-plugin-polyfill-regenerator": "^0.6.1",
+				"semver": "^6.3.1"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			},
+			"peerDependencies": {
+				"@babel/core": "^7.0.0-0"
+			}
+		},
+		"node_modules/@babel/plugin-transform-runtime/node_modules/semver": {
+			"version": "6.3.1",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+			"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+			"dev": true,
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
 		"node_modules/@babel/plugin-transform-shorthand-properties": {
 			"version": "7.24.1",
 			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz",
@@ -10604,6 +10635,28 @@
 				"@babel/helper-plugin-utils": "^7.24.0"
 			}
 		},
+		"@babel/plugin-transform-runtime": {
+			"version": "7.24.3",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz",
+			"integrity": "sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==",
+			"dev": true,
+			"requires": {
+				"@babel/helper-module-imports": "^7.24.3",
+				"@babel/helper-plugin-utils": "^7.24.0",
+				"babel-plugin-polyfill-corejs2": "^0.4.10",
+				"babel-plugin-polyfill-corejs3": "^0.10.1",
+				"babel-plugin-polyfill-regenerator": "^0.6.1",
+				"semver": "^6.3.1"
+			},
+			"dependencies": {
+				"semver": {
+					"version": "6.3.1",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+					"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+					"dev": true
+				}
+			}
+		},
 		"@babel/plugin-transform-shorthand-properties": {
 			"version": "7.24.1",
 			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz",
diff --git a/package.json b/package.json
index 9bab7eb..47f42cf 100644
--- a/package.json
+++ b/package.json
@@ -4,9 +4,9 @@
 	"description": "",
 	"scripts": {
 		"test": "echo \"Error: no test specified\" && exit 1",
-		"build": "tsc",
-		"start": "node dist/server.js",
-		"start:dev": "nodemon",
+		"build": "tsc && webpack --config ./webpack.config.ts",
+		"start": "NODE_ENV=production node dist/src/server/server.js",
+		"start:dev": "NODE_ENV=development nodemon",
 		"start:prod": "npm run build && npm run start"
 	},
 	"repository": {
@@ -28,6 +28,7 @@
 	},
 	"devDependencies": {
 		"@babel/core": "^7.24.3",
+		"@babel/plugin-transform-runtime": "^7.24.3",
 		"@babel/preset-env": "^7.24.3",
 		"@babel/preset-react": "^7.24.1",
 		"@babel/preset-typescript": "^7.24.1",
@@ -52,6 +53,7 @@
 		"webpack": "^5.91.0",
 		"webpack-cli": "^5.1.4",
 		"webpack-dev-server": "^5.0.4",
-		"webpack-hot-middleware": "^2.26.1"
+		"webpack-hot-middleware": "^2.26.1",
+		"webpack-merge": "^5.10.0"
 	}
 }
diff --git a/src/server/server.ts b/src/server/server.ts
index fe086ef..836c63c 100644
--- a/src/server/server.ts
+++ b/src/server/server.ts
@@ -6,6 +6,8 @@ import webpack from 'webpack'
 import webpackConfig from '../../webpack.config.dev'
 import webpackDevMiddleware from 'webpack-dev-middleware'
 import errorHandler from './middleware/error-handler'
+import path from 'path'
+const DIST_DIR = path.resolve(__dirname, '../../')
 
 dotenv.config()
 const port = process.env.PORT || 8080
@@ -14,7 +16,7 @@ const app: Express = express()
 app.use(express.json())
 
 if (process.env.NODE_ENV === 'production') {
-	// nothing yet
+	app.use(express.static(DIST_DIR))
 } else {
 	const compiler = webpack(webpackConfig)
 	const wdMiddleware = webpackDevMiddleware(compiler)
diff --git a/webpack.config.dev.ts b/webpack.config.dev.ts
index bface1b..c4cdf6e 100644
--- a/webpack.config.dev.ts
+++ b/webpack.config.dev.ts
@@ -1,38 +1,20 @@
-import * as path from 'path'
 import HtmlWebpackPlugin from 'html-webpack-plugin'
+import * as path from 'path'
 import webpack, { Configuration } from 'webpack'
+import { merge } from 'webpack-merge'
+import commonConfig from './webpack.config'
 
-const config: Configuration = {
+const config: Configuration = merge(commonConfig, {
 	entry: [
 		path.resolve(__dirname, './src/client/index.tsx'),
 		'webpack-hot-middleware/client?quiet=true',
 	],
-	module: {
-		rules: [
-			{
-				test: /\.tsx?$/,
-				use: 'ts-loader',
-				exclude: /node_modules/,
-			},
-		],
-	},
 	mode: 'development',
 	devtool: 'source-map',
-	resolve: {
-		extensions: ['.tsx', '.ts', '.js'],
-	},
-	output: {
-		filename: 'bundle.js',
-		path: path.resolve(__dirname, 'public'),
-	},
 	plugins: [
-		new HtmlWebpackPlugin({
-			filename: 'index.html',
-			template: path.resolve(__dirname, './src/client/public/index.html'),
-		}),
 		new webpack.HotModuleReplacementPlugin(),
 		new webpack.NoEmitOnErrorsPlugin(),
 	],
-}
+})
 
 export default config
diff --git a/webpack.config.ts b/webpack.config.ts
new file mode 100644
index 0000000..11ad686
--- /dev/null
+++ b/webpack.config.ts
@@ -0,0 +1,34 @@
+import * as path from 'path'
+import HtmlWebpackPlugin from 'html-webpack-plugin'
+import { Configuration } from 'webpack'
+
+const config: Configuration = {
+	entry: path.resolve(__dirname, './dist/src/client/index.js'),
+	module: {
+		rules: [
+			{
+				test: /\.tsx?$/,
+				use: 'ts-loader',
+				exclude: /node_modules/,
+			},
+		],
+	},
+	mode: 'production',
+	target: 'web',
+	resolve: {
+		extensions: ['.tsx', '.ts', '.js'],
+	},
+	output: {
+		path: path.resolve(__dirname, './dist'),
+		publicPath: '/',
+		filename: '[name].js',
+	},
+	plugins: [
+		new HtmlWebpackPlugin({
+			filename: 'index.html',
+			template: path.resolve(__dirname, './src/client/public/index.html'),
+		}),
+	],
+}
+
+export default config
-- 
GitLab