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