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

Webpack 4“大小超出建议的限制(244 KiB)”

朱欣荣
2023-03-14
问题内容

我有两个文件,它们合并在一起的长度小于600字节(.6kb),如下所示。

那么我的app.bundle.js太大了(987kb),又如何管理它的大小又如何呢?

src文件index.js

import _ from 'lodash';
import printMe from './print.js';


  function component() {
    var element = document.createElement('div');
    var btn = document.createElement('button');

    // Lodash, now imported by this script
    element.innerHTML = _.join(['Hello', 'webpack'], ' ');

    btn.innerHTML = 'click and check console';
    btn.onclick = printMe;

    element.appendChild(btn);

    return element;
  }

  document.body.appendChild(component());

src文件print.js

export default function printMe() {
  consoe.log('Called from print.js');
}

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
  entry: {
    app: './src/index.js',
    print:'./src/print.js'
  },
  devtool: 'inline-source-map',
  plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
        title: 'Output Management'
    })
  ],
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

package.json

{
  "name": "my-webpack-4-proj",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "mode": "development",
  "scripts": {
    "dev": "webpack --mode development",
    "build": "webpack --mode production",
    "watch": "webpack --watch",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^0.1.19",
    "css-loader": "^0.28.11",
    "csv-loader": "^2.1.1",
    "file-loader": "^1.1.11",
    "html-webpack-plugin": "^3.0.6",
    "style-loader": "^0.20.3",
    "webpack": "^4.1.1",
    "webpack-cli": "^2.0.12",
    "xml-loader": "^1.2.1"
  },
  "dependencies": {
    "express": "^4.16.3",
    "lowdash": "^1.2.0"
  }
}

警告信息:

资产大小限制警告:以下资产超过了建议的大小限制(244 KiB)。这可能会影响网络性能。资产:app.bundle.js(964 KiB)


问题答案:

发生这种情况是因为webpack捆绑了所有代码依赖项。当您使用lodash时,lodash的最小版本将添加到您的源代码中。另外,您还包括源地图:

devtool: 'inline-source-map',

尽管这对于调试来说应该没问题,但是没有理由在Prod版本中包含您的源映射。因此,您可以采取一些措施来减少套件的尺寸。

  1. 确保正确设置模式:在webpack配置中标记。您可以将模式:“开发”或模式:“生产”。这将向webpack提示您正在执行哪种构建,以便向您发出适当的警告。
  2. 确保在产品构建中不包括源地图
  3. 避免过度使用您不需要的外部依赖。

有时即使是这些事情也不会使捆绑包的大小降至244kb以下,在这种情况下,您可以做的就是拆分捆绑包并开始使用html" target="_blank">逻辑块。首先,您可以使用提取文本插件轻松将js与样式表分离。

您可以使用的另一种技术是动态导入。

动态导入:通过模块内的内联函数调用拆分代码

这将使您可以将代码按逻辑分解为与屏幕相关的模块,以便仅加载所需的库。有关动态导入的更多信息,您可以查看官方文档。
https://webpack.js.org/guides/code-
splitting/



 类似资料:
  • 问题内容: “数据:” URL方案值是否有大小限制?我对流行的Web浏览器中的限制感兴趣。换句话说,多久可以成为或? 问题答案: 简短答案:数据URI限制有所不同。 有很多答案。正如5年前提出的问题一样,大多数问题由于过时而现在不正确,但是这个问题排在Google结果“数据URI限制”的顶部。数据URI现在得到广泛支持,并且IE 7/8不再是相关的浏览器。下面有许多参考文献,因为今天的答案是微妙的

  • 问题内容: 我试图将InputStream复制到文件,如果InputStream的大小大于1MB,则中止复制。在Java7中,我编写了如下代码: 第一个问题:是否有更好的解决方案? 第二个问题:我的另一个解决方案-在复制操作之前,我先计算此InputStream的大小。所以我复制InputStream 然后得到。但是问题是InputStream可能不是,因此InputStream无法在复制文件操作

  • 我试图在我的博客上使用AMP,将图像转换为AMP图像会导致图像脱离div并破坏整个显示。 未激活AMP时,图像如下所示: 当放大器被激活时,它们看起来是这样的 我只是执行了一个preg_replace,用amp-img替换img标签。 如果没有AMP,图像会停留在父DIV内,但如果激活AMP,则图像会完全脱离DIV。如果我尝试将父DIV设置为宽度的10%以查看发生了什么,我会看到父DIV占据了宽度

  • 我知道这个错误应该通过配置文件来解决,这正是我所做的,但是这个错误仍然发生。 我已经将在设置为,但我仍然面临这个错误。有人知道为什么吗? 错误

  • 问题内容: 我试图通过这样将数据从一个活动传递到另一个活动: 这是包含用户数据的列表,包括Base64编码的照片,此列表中字符串大小的总和约为500Kb 打电话到黑屏挂了几分钟,然后出现ANR错误。完全不调用子活动。 如果我不向mUsers中添加大字符串(没有Base64编码的照片),则可以正常工作。 请帮忙。 问题答案: 如果两种活动都是您的,请使用体面的数据模型。Android不鼓励设计精良的

  • 提前感谢你的帮助