summaryrefslogtreecommitdiffstats
path: root/html/webpack.config.js
diff options
context:
space:
mode:
Diffstat (limited to 'html/webpack.config.js')
-rw-r--r--html/webpack.config.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/html/webpack.config.js b/html/webpack.config.js
new file mode 100644
index 0000000..18bfcf3
--- /dev/null
+++ b/html/webpack.config.js
@@ -0,0 +1,101 @@
+const path = require('path');
+const { merge } = require('webpack-merge');
+const ESLintPlugin = require('eslint-webpack-plugin');
+const CopyWebpackPlugin = require('copy-webpack-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
+const TerserPlugin = require('terser-webpack-plugin');
+
+const devMode = process.env.NODE_ENV !== 'production';
+
+const baseConfig = {
+ context: path.resolve(__dirname, 'src'),
+ entry: {
+ app: './index.tsx',
+ },
+ output: {
+ path: path.resolve(__dirname, 'dist'),
+ filename: devMode ? '[name].js' : '[name].[contenthash].js',
+ },
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ use: 'ts-loader',
+ exclude: /node_modules/,
+ },
+ {
+ test: /\.s?[ac]ss$/,
+ use: [devMode ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
+ },
+ ],
+ },
+ resolve: {
+ extensions: ['.tsx', '.ts', '.js'],
+ },
+ plugins: [
+ new ESLintPlugin({
+ context: path.resolve(__dirname, '.'),
+ extensions: ['js', 'jsx', 'ts', 'tsx'],
+ }),
+ new CopyWebpackPlugin({
+ patterns: [{ from: './favicon.png', to: '.' }],
+ }),
+ new MiniCssExtractPlugin({
+ filename: devMode ? '[name].css' : '[name].[contenthash].css',
+ chunkFilename: devMode ? '[id].css' : '[id].[contenthash].css',
+ }),
+ new HtmlWebpackPlugin({
+ inject: false,
+ minify: {
+ removeComments: true,
+ collapseWhitespace: true,
+ },
+ title: 'ttyd - Terminal',
+ template: './template.html',
+ }),
+ ],
+ performance: {
+ hints: false,
+ },
+};
+
+const devConfig = {
+ mode: 'development',
+ devServer: {
+ static: path.join(__dirname, 'dist'),
+ compress: true,
+ port: 9000,
+ client: {
+ overlay: {
+ errors: true,
+ warnings: false,
+ },
+ },
+ proxy: [
+ {
+ context: ['/token', '/ws'],
+ target: 'http://localhost:7681',
+ ws: true,
+ },
+ ],
+ webSocketServer: {
+ type: 'sockjs',
+ options: {
+ path: '/sockjs-node',
+ },
+ },
+ },
+ devtool: 'inline-source-map',
+};
+
+const prodConfig = {
+ mode: 'production',
+ optimization: {
+ minimizer: [new TerserPlugin(), new CssMinimizerPlugin()],
+ },
+ devtool: 'source-map',
+};
+
+module.exports = merge(baseConfig, devMode ? devConfig : prodConfig);