require('dotenv').config() const baseConfig = require('./webpack.config.base.js') const fs = require('fs') const path = require('path') const { AngularWebpackPlugin } = require('@ngtools/webpack') const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin const HtmlWebpackPlugin = require('html-webpack-plugin') const htmlPluginOptions = { hash: true, minify: false } const outputPath = path.join(__dirname, 'build') const backendURL = process.env.BACKEND_URL if (process.env.DEV && !backendURL) { backendURL = 'http://localhost:8001' } if (!backendURL) { throw new Error('BACKEND_URL env var is required') } module.exports = { name: 'browser', target: 'web', ...baseConfig, entry: { index: path.resolve(__dirname, 'src/index.ts'), terminal: path.resolve(__dirname, 'src/terminal.ts'), }, plugins: [ ...baseConfig.plugins, new AngularWebpackPlugin({ tsconfig: 'tsconfig.json', directTemplateLoading: false, skipCodeGeneration: false, }), new HtmlWebpackPlugin({ template: './src/index.html', filename: 'index.html', chunks: ['index'], ...htmlPluginOptions, }), new HtmlWebpackPlugin({ template: './src/terminal.html', filename: 'terminal.html', chunks: ['terminal'], ...htmlPluginOptions, }), { apply: (compiler) => { compiler.hooks.afterEmit.tap('AfterEmitPlugin', () => { fs.writeFileSync(path.join(outputPath, 'config.json'), JSON.stringify({ backendURL, })) }) }, }, ], output: { path: outputPath, pathinfo: true, publicPath: '/', filename: '[name].js', chunkFilename: '[name].bundle.js', }, } if (process.env.BUNDLE_ANALYZER) { module.exports[0].plugins.push(new BundleAnalyzerPlugin()) }