Angular 预算中出现警告,超出了初始预算的最大值
当使用--prod构建angular 7项目时,我在预算中有一个警告 我有一个angular 7项目,我想构建它,但我有一个警告:Angular 预算中出现警告,超出了初始预算的最大值,angular,build,production,ng-build,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}
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]
预算究竟是什么?我应该如何管理它们呢?打开angular.json文件并查找
预算
关键字
它应该是这样的:
“预算”:[
{
“类型”:“首字母”,
“最大警告”:“2mb”,
“最大错误”:“5mb”
}
]
正如您可能猜到的,您可以增加maximumWarning
值来防止此警告,即:
“预算”:[
{
“类型”:“首字母”,
“maximumWarning”:“4mb”,什么是角度CLI预算?
预算是Angular CLI的一个鲜为人知的特性。这是一个相当小但非常整洁的特性
随着应用程序功能的增长,它们的大小也在增长。
预算是Angular CLI中的一项功能,允许您在配置中设置预算阈值,以确保应用程序的某些部分保持在您设置的范围内-官方文档
或者换句话说,我们可以将Angular应用程序描述为一组编译的JavaScript文件,称为bundle,由构建过程生成。
角度预算允许我们配置这些捆绑包的预期大小。更重要的是,当我们希望收到警告,甚至在捆绑包大小失控时生成错误时,我们可以为条件配置阈值
如何定义预算?
Angular.json文件中定义了角度预算。预算是根据每个项目定义的,这很有意义,因为工作区中的每个应用程序都有不同的需求
从实用的角度考虑,只有为生产构建定义预算才有意义。Prod build在应用了所有优化(如树抖动和代码最小化)后,创建了具有“真实大小”的捆绑包
哎呀,一个构建错误!超过了最大捆绑大小。这是一个很好的信号,告诉我们出了什么问题
我们可能在我们的功能中进行了实验,但没有正确地清理
我们的工具可能出错并执行错误的自动导入,或者我们从建议的导入列表中选择错误项
我们可能会在不适当的位置从惰性模块导入内容
我们的新功能非常庞大,不适合现有预算
第一种方法:您的文件是否已压缩?
一般来说,gzip文件只有原始文件大小的20%左右,这可以大大缩短应用程序的初始加载时间。
要检查是否已gzip文件,只需打开开发人员控制台的“网络”选项卡。在“响应标题”中,如果您看到“内容编码:gzip”,就可以开始了
如何进行gzip?
如果你在大多数云平台或CDN中托管Angular应用程序,你不应该担心这个问题,因为他们可能已经为你处理了这个问题。但是,如果你有自己的服务器(如NodeJS+expressJS)为你的Angular应用程序服务,一定要检查这些文件是否已gzip。
下面是一个在NodeJS+expressJS应用程序中gzip静态资产的示例。你很难想象这个死气沉沉的简单中间件“压缩”会将包大小从2.21MB减少到495.13KB
const compression = require('compression')
const express = require('express')
const app = express()
app.use(compression())
第二种方法::分析角度束
如果您的包太大,您可能需要分析您的包,因为您可能使用了不合适的大型第三方包,或者您忘记删除一些包(如果您不再使用)。Webpack具有一个惊人的功能,可以让我们直观地了解Webpack包的组成
这张图非常容易得到
npm安装-g网页包包分析器
在Angular应用程序中,运行ng build--stats json
(不要使用标志--prod
)。通过启用--stats json
,您将获得一个额外的文件stats.json
最后,运行webpack bundle analyzer./dist/stats.json
,您的浏览器将在localhost:8888弹出页面。玩得开心
参考文献1:
参考文献2:你能解释一下预算是什么意思吗?@StackOverflow AddedHanks@yurzui为你快速回答,这是angular 7中的新功能吗?我们在angular 5中没有看到这个错误。这是否意味着我们做错了什么?@StackOverflow是在angular中添加的/cli@7
另请参见ng7的新增功能对于v7,我们也是默认的正在创建新项目以利用CLI中的捆绑预算。
如何优化以减少使用的预算大小?与其增加预算大小,不如尝试在资源中压缩图像,而不要编辑angular.jsonfile@Ahsan我就是这么做的。还是一样的消息。不确定是关于资产的。@Wee我的新答案,并检查链接您在nodejs项目中使用qzip,请参见,对于angular项目,您只需在build命令上启用qzip即可运行分析器,而无需全局安装包:npx webpack bundle analyzer./dist/stats.json
在angular 9中,命令是ng build--statsJson=true
。请您详细说明为什么要删除--来自stats json的prod
?这比你付钱就能得到的知识还要多,非常感谢