uni-app HBuilder更新之后小程序运行及发布报RangeError: Maximum call stack size exceeded

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app HBuilder更新之后小程序运行及发布报RangeError: Maximum call stack size exceeded

操作步骤:

  • 运行 => 运行到小程序模拟器 => 微信开发者工具

预期结果:

  • 微信开发者工具启动成功

实际结果:

  • RangeError: Maximum call stack size exceeded
    • 08:35:38.892 at String.replace (<anonymous>)
    • 08:35:38.910 at normalizePath (D:\HBuilderX-alpha\plugins\uniapp-cli\node_modules@dcloudio\uni-cli-shared\lib\util.js:12:45)
    • 08:35:38.924 at hasMainPackageComponent (D:\HBuilderX-alpha\plugins\uniapp-cli\node_modules@dcloudio\vue-cli-plugin-uni\lib\split-chunks.js:188:28)

bug描述:

升级HbuilderX之后,小程序运行报错,运行失败

  • RangeError: Maximum call stack size exceeded
    • 08:35:38.892 at String.replace (<anonymous>)
    • 08:35:38.910 at normalizePath (D:\HBuilderX-alpha\plugins\uniapp-cli\node_modules@dcloudio\uni-cli-shared\lib\util.js:12:45)
    • 08:35:38.924 at hasMainPackageComponent (D:\HBuilderX-alpha\plugins\uniapp-cli\node_modules@dcloudio\vue-cli-plugin-uni\lib\split-chunks.js:188:28)
    • 08:35:38.940 at hasMainPackageComponent (D:\HBuilderX-alpha\plugins\uniapp-cli\node_modules@dcloudio\vue-cli-plugin-uni\lib\split-chunks.js:206:20)
信息类别 信息内容
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 10
HBuilderX类型 Alpha
HBuilderX版本号 4.28
第三方开发者工具版本号 1.06.2409131
基础库版本号 3.4.10
项目创建方式 HBuilderX

4 回复

我也是,打包H5没问题,同样的项目打包小程序报这个
检查了git记录这个文件都没动过,昨天才成功打包了小程序
[HBuilder] 22:31:48.001 RangeError: Maximum call stack size exceeded [HBuilder] 22:31:48.008 at normalizePath (/Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-cli-shared/lib/util.js:12:23) [HBuilder] 22:31:48.016 at hasMainPackageComponent (/Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/lib/split-chunks.js:188:28) [HBuilder] 22:31:48.024 at hasMainPackageComponent (/Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/lib/split-chunks.js:206:20) [HBuilder] 22:31:48.028 at hasMainPackageComponent (/Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/lib/split-chunks.js:206:20) [HBuilder] 22:31:48.035 at hasMainPackageComponent (/Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/lib/split-chunks.js:206:20) [HBuilder] 22:31:48.043 at hasMainPackageComponent (/Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/lib/split-chunks.js:206:20)


我也是这个版本 4.28 小程序编译出错

https://ask.dcloud.net.cn/question/198764 替换官方的附件重新启动hbuilder编译小程序

在uni-app开发过程中,遇到“RangeError: Maximum call stack size exceeded”错误通常是因为代码中存在无限递归调用或深度嵌套导致的栈溢出。这种问题在HBuilder更新后尤其需要注意,因为更新可能会引入一些不兼容的变化或者优化,导致之前的代码逻辑出现问题。

以下是一些可能导致该错误的常见场景及相应的代码检查和修改示例:

1. 无限递归

检查所有递归函数,确保它们有明确的终止条件。

错误示例

function recursiveFunction(n) {
    console.log(n);
    recursiveFunction(n); // 缺少终止条件
}
recursiveFunction(1);

修正示例

function recursiveFunction(n) {
    if (n <= 0) return; // 添加终止条件
    console.log(n);
    recursiveFunction(n - 1);
}
recursiveFunction(10);

2. 深度嵌套的对象或数组

如果代码中处理深度嵌套的数据结构,尝试简化结构或使用循环代替递归。

错误示例(深度嵌套对象):

let obj = {a: {b: {c: {d: {...}}}}};
function deepAccess(o, keys) {
    return keys.reduce((acc, key) => acc[key], o);
}
console.log(deepAccess(obj, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])); // 假设有更多层

修正示例: 考虑简化数据结构或使用循环逻辑来避免过深的嵌套访问。

3. 组件或页面间的循环引用

在uni-app中,如果页面或组件间存在循环引用,也可能导致栈溢出。

检查点

  • 确保没有组件A引入组件B,同时组件B又引入组件A的情况。
  • 使用Vue的provideinject来替代直接的父子组件引用,如果适用。

4. 第三方库或插件

有时候,第三方库或插件的更新也可能引入此类问题。检查最近的更新日志,看是否有相关变更。

总结

针对“RangeError: Maximum call stack size exceeded”错误,首先需要定位到具体的递归调用或深度嵌套位置,然后根据具体情况进行代码调整。如果问题依旧存在,考虑使用开发者工具中的性能分析功能来进一步诊断问题。以下是一个简单的性能分析代码示例,用于在Chrome DevTools中分析调用栈:

console.profile('Call Stack Analysis');
// 执行可能出问题的代码段
console.profileEnd('Call Stack Analysis');

运行上述代码后,在Chrome DevTools的“Profiles”面板中查看分析结果,可以帮助你更准确地定位问题所在。

回到顶部