-
Creator 版本:
2.3.2 -
目标平台:
iOS / Android / 模拟器 -
详细报错信息,包含调用堆栈:
D/jswrapper (130): JS: Enable batch GL commands optimization!
E/jswrapper (682): ScriptEngine::evalString script src/project.dev.js, failed!
E/jswrapper (300): [ERROR] Failed to invoke require, location: …\cocos\scripting\js-bindings\manual\jsb_global.cpp:300
E/jswrapper (272): ERROR: Uncaught RangeError: Maximum call stack size exceeded, location: src/project.dev.js:0:0
STACK:
[0]anonymous@src/project.dev.js:25823
[1]window.__require.datatype@src/project.dev.js:25891
[2]s@src/project.dev.js:18
[3]anonymous@src/project.dev.js:20
[4]window.__require.battle_config…/enums/datatype@src/project.dev.js:7989
[5]s@src/project.dev.js:18
[6]anonymous@src/project.dev.js:20
[7]window.__require.EffectImplement…/…/common_util@src/project.dev.js:2950
[8]s@src/project.dev.js:18
[9]anonymous@src/project.dev.js:20
[10]window.__require.EffectManager…/config/effect_cfg@src/project.dev.js:3406
[11]s@src/project.dev.js:18
[12]anonymous@src/project.dev.js:20
[13]window.__require.ActionManager…/config/action_cfg@src/project.dev.js:37
[14]s@src/project.dev.js:18
[15]anonymous@src/project.dev.js:20
[16]window.__require.BuffImplement…/config/battle_config@src/project.dev.js:1669
[17]s@src/project.dev.js:18
[18]anonymous@src/project.dev.js:20
[19]window.__require.BuffManager…/config/buff_cfg@src/project.dev.js:2299
E/jswrapper (682): ScriptEngine::evalString script main.js, failed! -
重现方式:
只要发布任何平台的native包运行就报错 -
之前哪个版本是正常的 :
没有正常过 -
手机型号 :
-
手机浏览器 :
-
编辑器操作系统 :
-
编辑器之前是否有其它报错 :
-
出现概率:
必现 -
额外线索:
typescript项目,代码规模较大,300+源码文件,4M代码量,存在循环import(A import B, B import C, C import A) -
手动解决方法:
生成的require方法有bug,原始的代码:
window.__require = function e(t, n, r) { function s(o, u) { if (!n[o]) { if (!t[o]) { var b = o.split("/"); b = b[b.length - 1]; if (!t[b]) { var a = "function" == typeof __require && __require; if (!u && a) return a(b, !0); if (i) return i(b, !0); throw new Error("Cannot find module '" + o + "'"); } o = b; } var f = n[o] = { exports: {} }; t[o][0].call(f.exports, function(e) { var n = t[o][1][e]; return s(n || e); }, f, f.exports, e, t, n, r); } return n[o].exports; } var i = "function" == typeof __require && __require; for (var o = 0; o < r.length; o++) s(r[o]); return s; }
后经调试手动修正这段代码替换为如下:
window.__require = function e(t, n, r) { function s(o, u) { if (!n[o]) { var b = o.split("/"); o = b[b.length - 1]; } if (!n[o]) { if (!t[o]) { var a = "function" == typeof __require && __require; if (!u && a) return a(o, !0); if (i) return i(o, !0); throw new Error("Cannot find module '" + o + "'"); } var f = n[o] = { exports: {} }; t[o][0].call(f.exports, function(e) { var n = t[o][1][e]; return s(n || e); }, f, f.exports, e, t, n, r); } return n[o].exports; } var i = "function" == typeof __require && __require; for (var o = 0; o < r.length; o++) s(r[o]); return s; }
问题解决。
creator最早从2.2.0开始使用,一路升级到2.3.2,这个问题都一直存在。
因此发上来希望未来版本解决该问题。