1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| const path = require('path'); const webpack = require('webpack'); const merge = require('webpack-merge'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const ManifestPlugin = require('webpack-manifest-plugin'); const InlineManifestWebpackPlugin = require('inline-manifest-webpack-plugin'); const WebpackBundleAnalyzer = require('webpack-bundle-analyzer'); const common = require('./webpack.common');
const { BundleAnalyzerPlugin, } = WebpackBundleAnalyzer;
module.exports = merge(common, { mode: 'production', devtool: 'source-map', entry: { app: [ './src/index.jsx', ], vendor: [ 'react', 'react-dom', 'redux', ], }, output: { filename: '[name].[chunkhash].bundle.js', chunkFilename: '[name].[chunkhash].bundle.js', path: path.resolve(__dirname, 'dist'), publicPath: '/', }, plugins: [ new CleanWebpackPlugin(['dist']), new HtmlWebpackPlugin({ title: 'React + ReactRouter', filename: './index.html', template: './index.html', }), new InlineManifestWebpackPlugin(), new UglifyJsPlugin({ sourceMap: true, }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production'), }), new ExtractTextPlugin({ filename: 'main.[chunkhash].css', }), new ManifestPlugin(), new webpack.NamedModulesPlugin(), new BundleAnalyzerPlugin(), ], optimization: { splitChunks: { chunks: 'initial', minSize: 0, minChunks: 1, maxAsyncRequests: 1, maxInitialRequests: 1, name: () => {}, cacheGroups: { priority: '0', vendor: { chunks: 'initial', test: /react|lodash|react-dom|redux/, name: 'vendor', minSize: 0, minChunks: 1, enforce: true, maxAsyncRequests: 1, maxInitialRequests: 1, reuseExistingChunk: true, }, }, }, runtimeChunk: { name: 'manifest', }, }, });
|