const path = require('path'); const webpack = require('webpack'); const AssetsWebpackPlugin = require('assets-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const merge = require('webpack-merge').merge; const wpConfig = require('./webpack.config.json'); let env = process.env.NODE_ENV || 'development'; const devMode = env === 'development'; const outputPath = path.join(__dirname, wpConfig.buildDir); const publicPath = '/' + wpConfig.buildDir + '/'; const baseConfig = { entry: wpConfig.entry, mode: devMode ? 'development' : 'production', output: { path: outputPath, publicPath: publicPath }, module: { rules: [ { test: /\.m?js$/, exclude: /(node_modules|bower_components)/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'] } } }, { test: /tinymce\/.*\/skin\.css$/i, use: [MiniCssExtractPlugin.loader, 'css-loader'] }, { test: /tinymce\/.*\/content\.css$/i, loader: 'css-loader', options: { esModule: false } }, { test: /\.css$/, use: ['style-loader', 'css-loader'], exclude: [/node_modules/] }, { test: /\.yml$/, use: ['json-loader', 'yaml-loader'] }, { test: /\.xml$/, use: 'raw-loader' }, { test: /\.ttf$/, type: 'asset/resource' }, { test: /\.scss$/, use: [ 'style-loader', 'css-loader', { loader: 'sass-loader', options: { sourceMap: true } } ] }, { test: /\.(woff|woff2)$/, use: [ { loader: 'file-loader', options: { name: '[name].[ext]', outputPath: 'fonts/' } } ] } ] }, resolve: { modules: [ __dirname + '/js', __dirname, __dirname + '/forms', 'node_modules', '/usr/lib/node_modules' ] }, node: { __dirname: true }, plugins: [ new AssetsWebpackPlugin({ path: outputPath }), new webpack.DefinePlugin({ _DEV_MODE: devMode, _DEV_SERVER_PORT: wpConfig.devServerPort, _PUBLIC_PATH: JSON.stringify(publicPath) }), new MiniCssExtractPlugin() ], optimization: { runtimeChunk: true, splitChunks: { chunks: 'all' } }, watchOptions: { ignored: /node_modules/ } }; const prodConfig = { output: { filename: '[name].[chunkhash].js', chunkFilename: 'chunk.[id].[chunkhash].js' }, optimization: { moduleIds: 'deterministic' }, devtool: 'source-map' }; const devConfig = { output: { filename: '[name].js', chunkFilename: 'chunk.[id].js' }, optimization: { moduleIds: 'named' }, devtool: 'eval', devServer: { host: '0.0.0.0', static: __dirname, port: wpConfig.devServerPort, headers: { 'Access-Control-Allow-Origin': '*' }, //stats: { chunks: false }, proxy: { '/api': 'http://localhost:3000', '/': { target: 'http://localhost/projects/hedera-web', bypass: req => (req.path !== '/' ? req.path : null) } } } }; const mrgConfig = devMode ? devConfig : prodConfig; module.exports = merge(baseConfig, mrgConfig);