const ManifestPlugin = require('webpack-manifest-plugin'); const WorkboxWebpackPlugin = require('workbox-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const CompressionPlugin = require('compression-webpack-plugin'); const ProgmemGenerator = require('./progmem-generator.js'); module.exports = function override(config, env) { const hosted = process.env.REACT_APP_HOSTED; if (env === 'production' && !hosted) { console.log('Custom webpack...'); // rename the output file, we need it's path to be short for LittleFS config.output.filename = 'js/[id].[chunkhash:4].js'; config.output.chunkFilename = 'js/[id].[chunkhash:4].js'; // take out the manifest and service worker plugins config.plugins = config.plugins.filter( (plugin) => !(plugin instanceof ManifestPlugin) ); config.plugins = config.plugins.filter( (plugin) => !(plugin instanceof WorkboxWebpackPlugin.GenerateSW) ); // shorten css filenames const miniCssExtractPlugin = config.plugins.find( (plugin) => plugin instanceof MiniCssExtractPlugin ); miniCssExtractPlugin.options.filename = 'css/[id].[contenthash:4].css'; miniCssExtractPlugin.options.chunkFilename = 'css/[id].[contenthash:4].c.css'; // build progmem data files config.plugins.push( new ProgmemGenerator({ outputPath: '../lib/framework/WWWData.h', bytesPerLine: 20 }) ); // add compression plugin, compress javascript config.plugins.push( new CompressionPlugin({ filename: '[path].gz[query]', algorithm: 'gzip', test: /\.(js)$/, deleteOriginalAssets: true }) ); } return config; };