/* eslint-disable import/no-extraneous-dependencies */ const { HotModuleReplacementPlugin } = require('webpack'); const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); const HardSourceWebpackPlugin = require('hard-source-webpack-plugin'); const commonPaths = require('./paths'); module.exports = { devtool: 'cheap-eval-source-map', output: { filename: '[name].js', path: commonPaths.outputPath, chunkFilename: '[name].js', }, module: { rules: [ { test: /\.(js|jsx)$/, // allows both .jsx and .js exclude: /node_modules/, include: commonPaths.source, loader: 'babel-loader', options: { cacheDirectory: true, plugins: ['react-hot-loader/babel'], }, }, { test: /\.(sa|sc|c)ss$/, use: [{ loader: 'style-loader', }, { loader: 'css-loader', options: { modules: false, }, }, { loader: 'sass-loader', }, ], }, ], }, devServer: { contentBase: commonPaths.outputPath, compress: true, hot: true, port: 3000, }, plugins: [ new HotModuleReplacementPlugin(), // new HardSourceWebpackPlugin({ // // Either an absolute path or relative to webpack's options.context. // cacheDirectory: commonPaths.cachePath, // // Either a string of object hash function given a webpack config. // // node-object-hash on npm can be used to build this. // configHash: (webpackConfig) => require('node-object-hash')({ // eslint-disable-line // sort: false, // }).hash(webpackConfig), // // Either false, a string, an object, or a project hashing function. // environmentHash: { // root: process.cwd(), // directories: [], // files: [ // // Cache will get an unique hash based on those files // // if either of them changes, new cache must be generated // 'package-lock.json', // '.babelrc.js', // ], // }, // info: { // mode: 'none', // level: 'debug', // }, // // Clean up large, old caches automatically. // cachePrune: { // // Caches younger than `maxAge` are not considered for deletion. // // They must be at least this old in milliseconds. // maxAge: 3 * 60 * 60 * 1000, // 3 hours // // All caches together must be larger than `sizeThreshold` before any // // caches will be deleted. // // Together they must be at least this big in bytes. // sizeThreshold: 50 * 1024 * 1024, // 50 MB // }, // }), new BundleAnalyzerPlugin({ analyzerPort: 8888, openAnalyzer: false, }), ], };