Buckets:
| 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); | |
Xet Storage Details
- Size:
- 2.84 kB
- Xet hash:
- c5345b57aa5e12aa8e990e37aa1745dd634c5d9cb95df7bcb970e46db2e23c5e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.