невозможно сжать в gzip в веб-пакете - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу сжать свое приложение реакции в gzip, на самом деле это 2,2 МБ, поэтому я использовал ression-webpack-plugin , но я не могу сжать
my webpack.config.js

const webpack = require('webpack');
const path = require('path');
const fs = require("fs")
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const CompressionPlugin = require('compression-webpack-plugin');

const VENDOR_LIBS =[
    'antd','axios','moment','rc-time-picker','react',
    'react-dom','react-ga','react-google-maps','react-loadable',
    'react-redux','react-router','react-router-dom','recompose','redux','redux-thunk'
]
module.exports = (env) => {
    const isProduction = env === 'production';
    const CSSExtract = new ExtractTextPlugin('styles.css');

    return {
        node: {
            fs: 'empty',
            child_process: 'empty',
          },
        entry: {
            bundle:'./src/app.js',
            vendor:VENDOR_LIBS
        },
        output: {
            path: path.join(__dirname, 'public'),
            filename: '[name].js'
        },
        module: {
            rules: [{
                loader: 'babel-loader',
                test: /\.js$/,
                exclude: /node_modules/
            }, {
                test: /\.s?css$/,
                use: CSSExtract.extract({
                    use: [
                        {
                            loader: 'css-loader',
                            options: {
                                sourceMap: true
                            }
                        },
                        {
                            loader: 'sass-loader',
                            options: {
                                sourceMap: true
                            }
                        }
                    ]
                })
            },{
                test: /\.(gif|svg|jpg|png|ttf|eot|woff(2)?)(\?[a-z0-9=&.]+)?$/,
                loader: "file-loader",
            }],
        },

        plugins: [
            CSSExtract,
            new webpack.optimize.CommonsChunkPlugin({
                name:'vendor'
            }),
            new HtmlWebpackPlugin({
                template:'src/index.html'
            }),
            new CompressionPlugin(),
            new BundleAnalyzerPlugin()

        ],
        devtool: isProduction ? 'source-map' : 'inline-source-map',
        devServer: {
            contentBase: path.join(__dirname, 'public'),
            historyApiFallback: true,
            host:'0.0.0.0',
            disableHostCheck: true,
        }
    };
};

это показывает мне ошибку

TypeError: Невозможно прочитать свойство 'emit' из неопределенного
в CompressionPlugin.apply (/media/.........
если я добавлю дополнительные параметры к CompressionPlugin вроде

new CompressionPlugin({
  asset: '[path].gz[query]',
  algorithm: 'gzip',
  test: /\.js$|\.css$|\.html$|\.eot?.+$|\.ttf?.+$|\.woff?.+$|\.svg?.+$/,
  threshold: 10240,
  minRatio: 0.8
  })

это показывает мне ошибку

выбросить новую ValidationError (ajv.errors, name);
ValidationError: неверные параметры подключаемого модуля сжатия
опции НЕ должны иметь дополнительных свойств

как мне решить эту проблему или есть какой-нибудь другой способ сжать мое приложение.

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Измените "актив" на "имя файла".

new CompressionPlugin({
  filename: '[path].gz[query]',
  algorithm: 'gzip',
  test: /\.js$|\.css$|\.html$|\.eot?.+$|\.ttf?.+$|\.woff?.+$|\.svg?.+$/,
  threshold: 10240,
  minRatio: 0.8
})
0 голосов
/ 11 января 2019

compression-webpack-plugin@2.0 имеет критические изменения.

Вы должны либо перейти на webpack 4, либо использовать сжатие-webpack-plugin@1.1.12.

.

А также опция актива устарела, вместо нее используйте имя файла .

0 голосов
/ 11 сентября 2018

Ваша проблема в том, что вам нужно работать с webpack 4, а узел должен быть> 6.9.0, как указано в документации:

"Для этого модуля требуется минимум Node v6.9.0и Webpack v4.0.0. "

Ваша конфигурация также неверна:

new CompressionPlugin({
  filename: '[path].gz[query]',
  algorithm: 'gzip',
  test: /\.js$|\.css$|\.html$|\.eot?.+$|\.ttf?.+$|\.woff?.+$|\.svg?.+$/,
  threshold: 10240,
  minRatio: 0.8
})
...