执行Nrwl Ng Generate命令时出现Maximum call stack size exceeded错误
解决Nrwl ng generate命令触发「Maximum call stack size exceeded」错误的方案
我之前帮团队排查过好几起Nx生成库时触发调用栈溢出的问题,分享几个经过验证的解决方案:
清理缓存与重建依赖
这是最常见的触发原因之一,Nx的缓存或损坏的依赖可能导致递归调用逻辑出错。执行以下步骤:- 删除本地依赖文件:
rm -rf node_modules package-lock.json(使用Yarn的话换成rm -rf node_modules yarn.lock) - 重新安装依赖:
npm install或yarn install - 重置Nx缓存:
npx nx reset,这个命令会彻底清理Nx的所有缓存和临时文件
- 删除本地依赖文件:
检查版本兼容性
Nx、Angular CLI和@nrwl/schematics版本不匹配很容易引发这类底层递归bug:- 用
npx nx report查看当前项目的所有核心依赖版本 - 确认这些版本符合Nx官方的版本兼容矩阵(可直接在Nx文档中查找对应Angular版本的推荐Nx版本)
- 如果版本不兼容,执行
npx nx migrate latest升级到最新的兼容版本,或者降级到匹配的稳定版本
- 用
简化命令参数,逐步排查
复杂的参数组合可能触发schematics的隐藏bug,先简化命令再逐步添加参数:- 先执行最基础的生成命令:
ng generate @nrwl/schematics:library feature-restaurant-profile --no-interactive - 如果成功,再逐步添加
--parentModule、--routing、--lazy等参数,定位到触发问题的具体参数 - 同时检查
--parentModule的路径是否完全正确,路径错误可能导致schematics在解析模块时陷入循环
- 先执行最基础的生成命令:
排查项目循环依赖
项目中已存在的循环依赖会让schematics的模块解析逻辑陷入无限递归:- 用
npx nx dep-graph生成项目依赖图,可视化检查是否存在循环依赖的模块 - 修复找到的循环依赖(比如提取共享模块、调整导入路径),再重新执行生成命令
- 用
更新Schematics到最新版本
旧版本的@nrwl/schematics可能存在已知的递归调用bug,执行以下命令更新:ng update @angular/cli @nrwl/workspace更新完成后重启终端,再尝试生成命令
手动创建库并配置(终极方案)
如果以上方法都无效,可以绕过自动生成逻辑,手动完成配置:- 执行
npx nx g library feature-restaurant-profile创建基础库 - 手动在
apps/web-kmeal-restaurant/src/app/app.module.ts中配置懒加载路由和模块引用 - 手动添加路由模块到库中,完成
--routing和--lazy的预期效果
- 执行
内容的提问来源于stack exchange,提问作者Bhaskar
相关产品推荐
相关产品推荐

