预算警告,超过初始预算的上限

时间:2019-01-01 13:44:27

标签: angular build production ng-build

使用--prod构建我的angular 7项目时,我在预算中发出警告。

我有一个Angular 7项目,我想构建它,但有一个警告:

WARNING in budgets, maximum exceeded for initial. Budget 2 MB was exceeded by 1.77 MB

这些是块的详细信息:

chunk {scripts} scripts.2cc9101aa9ed72da1ec4.js (scripts) 154 kB  [rendered]
chunk {0} runtime.ec2944dd8b20ec099bf3.js (runtime) 1.41 kB [entry] [rendered]
chunk {1} main.13d1eb792af7c2f359ed.js (main) 3.34 MB [initial] [rendered]
chunk {2} polyfills.11b1e0c77d01e41acbba.js (polyfills) 58.2 kB [initial] [rendered]
chunk {3} styles.33b11ad61bf10bb992bb.css (styles) 379 kB [initial] [rendered]

预算到底是什么?以及我应该如何管理它们?

2 个答案:

答案 0 :(得分:34)

打开 angular.json 文件并找到budgets关键字。

它应该像这样:

"budgets": [
   {
      "type": "initial",
      "maximumWarning": "2mb",
      "maximumError": "5mb"
   }
]

您可能已经猜到可以增加maximumWarning值以防止出现此警告,即:

"budgets": [
   {
      "type": "initial",
      "maximumWarning": "4mb", <===
      "maximumError": "5mb"
   }
]

预算是什么意思?

  

效果预算是对某些值的一组限制,这些限制可以   影响网站性能,在设计中可能不会超过   开发任何Web项目。

在我们的情况下,预算是捆绑商品大小的限制。

另请参阅:

答案 1 :(得分:27)

什么是Angular CLI预算? 预算是Angular CLI鲜为人知的功能之一。这是一个很小但很整洁的功能!

随着应用程序功能的增加,它们的大小也随之增加。 预算是Angular CLI中的一项功能,可让您在配置中设置预算阈值,以确保您的应用程序的某些部分保持在您设置的边界内官方文档

或者换句话说,我们可以将Angular应用程序描述为一组称为JavaScript的已编译JavaScript文件,这些文件是由构建过程生成的。 角度预算允许我们配置这些捆绑包的预期大小。更重要的是,我们可以为希望收到警告甚至如果捆绑包大小变得无法控制的错误而导致构建失败的条件配置阈值!

如何定义预算? Angular预算是在angular.json文件中定义的。为每个项目定义预算很有意义,因为工作区中的每个应用程序都有不同的需求。

务实地思考,只有为生产版本定义预算才有意义。在应用了诸如摇树和代码最小化之类的所有优化之后,产品构建会创建具有“真实大小”的捆绑包。

糟糕,构建错误!超过最大捆束尺寸。这是一个很好的信号,告诉我们出了点问题…

  1. 我们可能已经尝试过我们的功能,但未正确清理
  2. 我们的工具可能会出错并执行错误的自动导入,或者我们从建议的导入列表中选择了错误的项目
  3. 我们可能会在不适当的位置从惰性模块中导入内容
  4. 我们的新功能非常强大,不符合现有预算

第一种方法:是否将文件压缩?

通常来说,压缩后的文件仅占原始文件大小的20%,这可以大大减少应用程序的初始加载时间。 要检查是否已压缩文件,只需打开开发者控制台的“网络”标签。在“响应标头”中,如果您看到“ Content-Encoding:gzip”,那就很好了。

如何gzip? 如果您在大多数云平台或CDN中托管Angular应用,则不必担心此问题,因为它们可能已经为您解决了此问题。但是,如果您有自己的服务器(例如NodeJS + expressJS)为Angular应用程序提供服务,则一定要检查文件是否已压缩。 以下是在NodeJS + expressJS应用中gzip静态资产的示例。您几乎无法想象,这种简单的中间件“压缩”功能会将捆绑包的大小从2.21MB减少到495.13KB。

const compression = require('compression')
const express = require('express')
const app = express()
app.use(compression())

第二种方法::分析您的Angular包

如果捆绑包的大小确实太大,则可能要分析捆绑包,因为您可能使用了不合适的大型第三方软件包,或者如果您不再使用它,则忘记删除某些软件包。 Webpack具有惊人的功能,可让我们直观地了解Webpack捆绑包的组成。

enter image description here

获得这张图非常容易。

  1. npm install -g webpack-bundle-analyzer
  2. 在Angular应用中,运行ng build --stats-json(不要使用标志--prod)。通过启用--stats-json,您将获得一个附加文件stats.json
  3. 最后,运行webpack-bundle-analyzer ./dist/stats.json,您的浏览器将在localhost:8888弹出页面。玩得开心。

ref 1:How Did Angular CLI Budgets Save My Day And How They Can Save Yours

ref 2:Optimize Angular bundle size in 4 steps