|
@@ -0,0 +1,89 @@
|
|
|
+const merge = require('webpack-merge');
|
|
|
+const common = require('./webpack.common.config.js');
|
|
|
+
|
|
|
+const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
|
+const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
|
|
+const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
|
|
|
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
|
+const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
|
|
|
+
|
|
|
+module.exports = merge(common, {
|
|
|
+ mode: 'production',
|
|
|
+ output: {
|
|
|
+ filename: 'js/[name].[chunkhash:8].bundle.js',
|
|
|
+ },
|
|
|
+ module: {
|
|
|
+ rules: [
|
|
|
+ {
|
|
|
+ test: /\.css$/,
|
|
|
+ use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ test: /\.less$/,
|
|
|
+ use: [
|
|
|
+ MiniCssExtractPlugin.loader,
|
|
|
+ 'css-loader',
|
|
|
+ 'less-loader',
|
|
|
+ 'postcss-loader',
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ // {
|
|
|
+ // test: /\.(scss|sass)$/,
|
|
|
+ // use: [
|
|
|
+ // MiniCssExtractPlugin.loader,
|
|
|
+ // 'css-loader',
|
|
|
+ // 'postcss-loader',
|
|
|
+ // 'sass-loader'
|
|
|
+ // ]
|
|
|
+ // },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ plugins: [
|
|
|
+ new HtmlWebpackPlugin({
|
|
|
+ filename: 'index.html',
|
|
|
+ template: 'public/index.html',
|
|
|
+ inject: 'body',
|
|
|
+ minify: {
|
|
|
+ removeComments: true,
|
|
|
+ collapseWhitespace: true,
|
|
|
+ },
|
|
|
+ }),
|
|
|
+ new CleanWebpackPlugin(),
|
|
|
+ new MiniCssExtractPlugin({
|
|
|
+ filename: 'css/[name].[hash].css',
|
|
|
+ chunkFilename: 'css/[id].[hash].css',
|
|
|
+ }),
|
|
|
+ ],
|
|
|
+ optimization: {
|
|
|
+ minimizer: [
|
|
|
+ new UglifyJsPlugin(),
|
|
|
+ new OptimizeCssAssetsPlugin({
|
|
|
+ assetNameRegExp: /\.css$/g,
|
|
|
+ cssProcessor: require('cssnano'),
|
|
|
+ cssProcessorPluginOptions: {
|
|
|
+ preset: ['default', { discardComments: { removeAll: true } }],
|
|
|
+ },
|
|
|
+ canPrint: true,
|
|
|
+ }),
|
|
|
+ ],
|
|
|
+ splitChunks: {
|
|
|
+ chunks: 'all',
|
|
|
+ minSize: 30000,
|
|
|
+ maxSize: 0,
|
|
|
+ minChunks: 1,
|
|
|
+ cacheGroups: {
|
|
|
+ framework: {
|
|
|
+ test: 'framework',
|
|
|
+ name: 'framework',
|
|
|
+ enforce: true,
|
|
|
+ },
|
|
|
+ vendors: {
|
|
|
+ priority: -10,
|
|
|
+ test: /node_modules/,
|
|
|
+ name: 'vendor',
|
|
|
+ enforce: true,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+});
|