【问题标题】:Webpack builds large production fileWebpack 构建大型生产文件
【发布时间】:2019-11-16 14:55:33
【问题描述】:

我不知道为什么,但是我的 webpack 配置创建了非常大的应用程序构建(15MB 单个 app.js 文件)

有什么办法可以让这个文件变小吗?

我正在使用yarn build-production 构建生产

// package.json

  "scripts": {
    "clean": "rimraf dist/*",
    "build-production": "webpack --progress --bail --env production -p",
    "build-app": "webpack --progress --bail -p",
    "start": "webpack --progress --env prepare-localhost && webpack-dev-server --hot --open --watch"
  },




// webpack.conf.js
'use strict';

/* eslint no-console: "off" */
const configFactory = require('./config/webpack');
const defaultConfig = 'dev';

module.exports = (configName) => {

    // If there was no configuration give, assume default
    const requestedConfig = configName || defaultConfig;
    let loadedInstance = null;

    try {
        loadedInstance = configFactory(configName);
    } catch(exception) {
        console.warn('Probably config is missing, used dev as default. Please try: production, localhost, test, prepare-localhost... Exception: ' + exception.message);
        loadedInstance = configFactory(defaultConfig);
    }

    // Set the global environment
    process.env.NODE_ENV = loadedInstance.env;

    return loadedInstance.config;
};

// package.json
"webpack": "^3.5.6",
"webpack-cli": "^2.0.11",
"webpack-dev-server": "^2.7.1"

我不擅长 webpack 配置,所以也许你能告诉我应该更改或添加什么? 这是最新的反应应用程序。

【问题讨论】:

    标签: webpack webpack-dev-server webpack-cli


    【解决方案1】:

    很难知道是什么导致了大文件,webpack 4 默认配置为输出优化的包,所以我猜你的某些依赖项非常大。

    为了确定您的捆绑包中发生了什么,您可以添加webpack-bundle-analyzer。 如果您需要帮助,请上传结果截图。

    编辑 如前所述,您的包中有大量库,例如 momentjs、material-ui、lodash。

    几个指针,

    1. react-tag-input - 应该是 40kb,但看起来它使用不同的 lodash 版本,因此你有 2 个版本 lodash 和 2 个 React 版本! - 考虑使用不同的库
    2. app.scss 看起来很大,检查原因。
    3. 考虑code splitting,您的应用可能没有每个页面上的图表,所以,
      • 仅在需要时加载recharts
      • 仅在需要时加载react-datepicker
      • 仅在需要时加载emoji-mart
      • 仅在需要时加载react-datepicker
    4. 为什么需要 jquery?

    【讨论】:

    • 你使用 reactjs 中所有可能的库;)你加载整个 lodash 吗?为什么你只能加载你需要的东西。 import { map, tail, times, uniq } from 'lodash';import map from 'lodash/map'; import tail from 'lodash/tail'; import times from 'lodash/times'; import uniq from 'lodash/uniq'; 与其他库一样,毕竟它们不是立即需要的,您可以动态加载它们。 medium.com/front-end-weekly/…facebook.github.io/create-react-app/docs/code-splitting
    猜你喜欢
    • 2021-07-20
    • 2017-03-07
    • 2018-01-07
    • 2018-10-10
    • 2019-04-04
    • 2018-07-22
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    相关资源
    最近更新 更多