Размер окончательного пакета Webpack слишком велик - PullRequest
0 голосов
/ 26 мая 2018

Создание сборки с использованием webpack 4.9.1 с использованием npm run build

Файловая команда Package.json

"build": "webpack --mode production --config webpack.config.prod.js",

После сборки размер моего пакета составляет 1010 КиБ, что составляетслишком огромныйпытаясь разобраться с самого дня, но безуспешно, поэтому, наконец, выложу сюда

image

webpack.config.prod.js

var path = require('path');
var webpack = require('webpack');
var CopyWebpackPlugin = require('copy-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
  mode: 'production',
  devtool: 'none',
  entry: {
    index: './src/index.js',
  },
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/'
  },
  optimization: {
    minimize: true,
  },
  plugins: [
    new webpack.LoaderOptionsPlugin({ options: {} }),
    new webpack.optimize.AggressiveMergingPlugin(),
    new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
    new CopyWebpackPlugin([
      {
        from: 'style.css',
      },
      {
        from: 'bootstrap.min.css',
      },
      {
        from: 'index.html',
      }
    ]),
    new BundleAnalyzerPlugin(),
  ],
  module: {
    noParse:[ /node_modules\/localforage\/dist\/localforage.js/],
    rules: [
      {
        test: /\.js$/,
        enforce: "pre",
        loaders: ['eslint-loader'],
        include: path.join(__dirname, 'src')
      },
      {
        test: /\.js$/,
        loaders: ['babel-loader'],
        include: [path.join(__dirname, 'src'), path.join(__dirname, 'translations')]
      },
      {
        // do not exclude node_modules, since map.json is in node_modules
        test: /\.json$/,
        loader: 'json'
      },
      {
        test: /\.css$/,
        loaders: [ 'style-loader', 'css-loader' ]
      },
    ]
  }
};

Мой .babelrc выглядит ниже

{
  "presets": ["react", "es2015", "stage-2"],
  "env": {
    "development": {
      "plugins": [
        ["react-transform", {
          "transforms": [{
            "transform": "react-transform-hmr",
            "imports": ["react"],
            "locals": ["module"],
            "preventFullImport": true
          }, {
            "transform": "react-transform-catch-errors",
            "imports": ["react", "redbox-react"],
            "preventFullImport": true
          }]
        }]
      ]
    }
  },
  "plugins": [
    ["transform-object-rest-spread"],
    ["transform-react-display-name"],
    ["module-resolver", {
      "root": ["./src"]
    }]
  ]
}

Я знаю, что здесь что-то упущено.

Должно быть где-то близко к рекомендациям веб-пакета или превышать их, но 1010 КБ это слишком много

ИЗ ЖУРНАЛОВ СТРОИТЕЛЬСТВА

ПРЕДУПРЕЖДЕНИЕ при ограничении размера точки входа: следующие точки входа объединеныразмер актива превышает рекомендуемый лимит (244 КиБ).Это может повлиять на производительность сети.Точки входа: индекс (1010 КиБ) bundle.js

Другая важная информация:

  1. версия webpack: webpack 4.9.1
  2. Узел.Версия js: v6.10.0 Операционная
  3. Система: Mac OS Дополнительные
  4. инструменты: npm -v = 4.1.2

1 Ответ

0 голосов
/ 26 мая 2018

Возможно, вы захотите разделить свои куски.Как у вас может быть отдельный кусок для вашего собственного кода и node_modules.

Возможно, вы захотите минимизировать код в рабочем режиме, чтобы уменьшить размер пакета.Вот что вы можете сделать с вашим файлом конфигурации веб-пакета:

const UglifyJSPlugin = require('uglifyjs-webpack-plugin');

optimization: splitChunks: {
    cacheGroups: {
      vendor: {
        chunks: "initial",
        test: path.resolve(process.cwd(), "node_modules"),
        name: "vendor",
        enforce: true
      }
    }
  },
  minimizer: [
    new UglifyJSPlugin({
      uglifyOptions: {
        sourceMap: true,
        compress: {
          drop_console: true,
          conditionals: true,
          unused: true,
          comparisons: true,
          dead_code: true,
          if_return: true,
          join_vars: true,
          warnings: false
        },
        output: {
          comments: false
        }
      }
    })
  ]

Это создаст отдельный пакет для вашего node_module, который вы можете включить в свой основной файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...