当前位置: 首页 > 面试题库 >

如何最小化webpack包的大小?

谈渊
2023-03-14
问题内容

我正在使用reactwebpack作为模块捆绑程序编写一个Web应用程序。jsx到目前为止,我的代码还很轻巧,整个文件夹的大小为25 kb。

bundle.js创建的webpack虽然是2.2 mb。使用-p标志运行优化后,它将捆绑包减少到700kb,这仍然非常大。

我调查了react.min.js文件,文件大小为130kb。

Webpack是否可能产生如此大的文件,或者我做错了什么?

webpack.config.js

var path = require('path');
var webpack = require('webpack');

module.exports = {
  entry: './public/components/main.jsx',
  output: {
    path: __dirname + "/public",
    filename: 'bundle.js'
  },
  module: {
    loaders: [{
      test: /.jsx?$/,
      loader: 'babel-loader',
      exclude: /node_modules/,
      query: {
        presets: ['es2015', 'react']
      }
    }, {
      test: /\.css$/,
      loader: "style!css"
    }]
  }
};

编辑

package.json:

{
  "name": "XChange",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "main": "./bin/www",
  "devDependencies": {
    "body-parser": "~1.13.2",
    "cookie-parser": "~1.3.5",
    "debug": "~2.2.0",
    "express": "~4.13.1",
    "jade": "~1.11.0",
    "morgan": "~1.6.1",
    "serve-favicon": "~2.3.0",
    "react-dom": "~0.14.3",
    "react": "~0.14.3",
    "webpack": "~1.12.9",
    "babel-loader": "~6.2.0",
    "babel-core": "~6.2.1",
    "babel-preset-react": "~6.1.18",
    "babel-preset-es2015": "~6.1.18",
    "react-bootstrap": "~0.28.1",
    "material-ui": "~0.14.0-rc1",
    "history": "~1.13.1",
    "react-router": "~1.0.2",
    "style-loader": "~0.13.0",
    "css-loader": "~0.18.0"
  },
  "dependencies": {
    "express-validator": "~2.18.0",
    "mongoose": "~4.2.9",
    "kerberos": "~0.0.17",
    "bcrypt": "~0.8.5"
  }
}

问题答案:

根据您的评论,您正在使用material-uireact-bootstrap。这些依赖项与您的reactreact- dom软件包一起由webpack捆绑在一起。任何时候,您requireimport软件包都将其捆绑为捆绑文件的一部分。

这就是我的猜测。您可能正在使用 方式导入react-bootstrapmaterial-ui组件: __

import { Button } from 'react-bootstrap';
import { FlatButton } from 'material-ui';

这是很好的和方便,但它并不仅仅捆绑ButtonFlatButton(和它们的依赖),但 整个 库。

减轻它的一种方法是尝试只importrequire需要什么,让我们说一下 组件 方法。使用相同的示例:

import Button from 'react-bootstrap/lib/Button';
import FlatButton from 'material-ui/lib/flat-button';

这只会捆绑ButtonFlatButton以及它们各自的依赖关系。但不是整个图书馆。因此,我将尝试摆脱所有 导入,而改用 组件 方式。

如果您不使用很多组件,那么它将大大减少捆绑文件的大小。

作为进一步的解释:

当使用 方式时,您将导入所有这些react-bootstrap和所有这些material-
ui
组件,无论您实际使用的是哪个组件。



 类似资料:
  • 我正在使用和作为模块绑定器编写一个web应用程序。到目前为止,我的代码非常轻,整个文件夹的大小是25kb。 然而,我的是从创建的,其大小为2.2MB。在使用标志运行优化后,它将捆绑包减少到700kb,这仍然非常大。 我已经查看了文件,它的大小是130kb。 有没有可能webpack产生了这么大的文件,或者我做错了什么? webpack.config.js 编辑 package.json:

  • 所以我能够将我的捆绑包大小从13mb减少到681 mb 我做了一些优化,比如正确的生产配置,优化库,比如lodash,用date fns替换momentjs。 现在,大多数软件包都不超过1mb,并且大多数都是由npm安装的依赖项。 在这里使用webpack-bundle-Analyzer就是我的bundle现在的样子 你们觉得我能做些什么来减少包裹的大小吗?也许删除jquery并转到vanilla

  • 我有一个使用react开发的网站,它只有一个页面,但产品包大小是1.11MIB。我正在使用firestore、firebase storage、material UI、react redux,该应用程序运行良好,除了捆绑包大小外,一切正常。 我的网页包配置文件 我不知道我在这里错过了什么来减小节点模块的大小。如果我们有任何其他选择,以减少捆绑大小,请给我一个建议。

  • 我正在制作一个Swing GUI。我没有得到如何在JPanel中最大和最小JTable。

  • 我遇到了MySQL的问题。我收到错误。关于StackOverflow,他们说MySQL配置中的很可能太低。 我尝试在中更改它,但该文件是不可编辑的。不能在PA上使用。 我正在使用Sqlalchemy处理与MySQL服务器的交互。 我能做什么?

  • 我有以下CEP PatternStream,其中数据流是基于实体ID分区的,因为只有实体具有相同的实体ID时,我才对模式匹配感兴趣: 但随后我注意到检查点状态大小随着实体ID数量的增加而增加。如果我对检查点的理解是正确的,这是意料之中的,因为运算符状态的数量会增加。但我想弄清楚是否有其他方法可以最小化检查点状态大小。 > 有没有不同的方法来实现这种模式匹配,而不根据实体ID对数据流进行分区?