const path = require('path'); const webpack = require('webpack'); const merge = require('webpack-merge'); const { DefinePlugin, ProvidePlugin } = require('webpack'); const { getIfUtils, removeEmpty } = require('webpack-config-utils'); const TerserPlugin = require('terser-webpack-plugin'); const NODE_ENV = process.env.NODE_ENV || 'development'; const { ifProduction } = getIfUtils(NODE_ENV); const UI_ROOT = path.resolve(__dirname, 'ui/'); const STATIC_ROOT = path.resolve(__dirname, 'static/'); let baseConfig = { mode: ifProduction('production', 'development'), devtool: ifProduction(false, 'eval-source-map'), optimization: { minimizer: [ new TerserPlugin({ parallel: true, terserOptions: { mangle: true, }, }), ], }, node: { __dirname: false, }, devServer: { historyApiFallback: true, }, module: { rules: [ { test: /\.jsx?$/, loader: 'babel-loader', options: { plugins: ['@babel/plugin-syntax-dynamic-import'], }, }, { test: /\.s?css$/, use: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader'], }, { test: /\.(png|svg|gif)$/, use: { loader: 'file-loader', options: { outputPath: 'img/', name: '[name].[ext]', }, }, }, { test: /\.(vert|frag|glsl)$/, use: { loader: 'raw-loader', }, }, ], }, // Allows imports for all directories inside '/ui' resolve: { modules: [UI_ROOT, 'node_modules', __dirname], extensions: ['.js', '.jsx', '.json', '.scss'], alias: { config: path.resolve(__dirname, './config.js'), // Build optimizations for 'redux-persist-transform-filter' 'redux-persist-transform-filter': 'redux-persist-transform-filter/index.js', 'lodash.get': 'lodash-es/get', 'lodash.set': 'lodash-es/set', 'lodash.unset': 'lodash-es/unset', 'lodash.pickby': 'lodash-es/pickBy', 'lodash.isempty': 'lodash-es/isEmpty', 'lodash.forin': 'lodash-es/forIn', 'lodash.clonedeep': 'lodash-es/cloneDeep', ...ifProduction({}, { 'react-dom': '@hot-loader/react-dom' }), }, symlinks: false, }, plugins: [ new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), new webpack.EnvironmentPlugin(['NODE_ENV']), new DefinePlugin({ __static: `"${path.join(__dirname, 'static').replace(/\\/g, '\\\\')}"`, 'process.env.NODE_ENV': JSON.stringify(NODE_ENV), 'process.env.LBRY_API_URL': JSON.stringify(process.env.LBRY_API_URL), }), ], }; module.exports = baseConfig;