解决NX Monorepo库(非应用)中‘bundle initial超出预算上限’警告
问题解答
问题原因
你遇到的'budgets' is not found in schema报错,核心原因是Angular库与应用使用的构建执行器不兼容:
- 你的Angular库使用的是
@nx/angular:package执行器(底层基于ng-packagr),这个执行器的配置规范里并没有budgets选项,所以强行添加会触发schema校验错误。 - 而Monorepo中的Angular应用使用的是
@nx/angular:browser执行器,该执行器的配置原生支持budgets,因此添加后不会报错。
针对两类警告的解决方法
1. 单个组件SCSS文件的预算警告
这类警告是Angular编译器对单个样式文件的大小限制,你可以在对应库的tsconfig.lib.json(或生产环境的tsconfig.lib.prod.json)中,通过angularCompilerOptions调整阈值:
{ "angularCompilerOptions": { // 保留原有配置 "styleBudget": { "maximumWarning": "4kb", // 按需调整单个SCSS文件的警告阈值 "maximumError": "8kb" // 按需调整单个SCSS文件的错误阈值 } } }
2. 初始包大小的预算警告
这个警告是针对整个应用的初始加载包,而非单个库的输出包——因为库最终是被应用引入打包的,所以你需要在**应用的project.json**中调整budgets配置:
{ "targets": { "build": { "executor": "@nx/angular:browser", // 其他配置... "configurations": { "production": { // 其他配置... "budgets": [ { "type": "initial", "maximumWarning": "1.5mb", "maximumError": "2mb" } ] } } } } }
如果需要单独限制单个库的输出包大小,可以借助NX的@nx/workspace:run-commands执行器,配合size-limit这类工具实现自定义的包大小校验。
内容的提问来源于stack exchange,提问作者smartmouse
相关产品推荐
相关产品推荐

