一、问题描述
前段时间有个前端小伙伴反馈在
vconsole.min.js:10 Uncaught (in promise) RangeError: Maximum call stack size exceeded at Array.slice (<anonymous>) at l.printLog (vconsole.min.js:10:53111) at n.map.window.console.<computed> (vconsole.min.js:10:52378) at l.printOriginLog (vconsole.min.js:10:53006) at l.printLog (vconsole.min.js:10:54051) at n.map.window.console.<computed> [as warn] (vconsole.min.js:10:52378) at warn$1 (vue.global.js:1598:15) at PublicInstanceProxyHandlers.ownKeys (vue.global.js:4689:7) at E (vconsole.min.js:10:36950) at Module._ (vconsole.min.js:10:36007)
二、问题排查
最初通过代码逐段注释排查发现,
于是,展开错误栈信息,看到了比较有“规律”的调用:
看上去,前端小伙伴用了前端调试经常使用的一个
由于问题只发生在打包后的生产环境,为了能在本地调试,需要搭建一个简易的生产环境来尽可能的还原问题:
(1)安装vscode的
(2)执行项目打包命令,构建产物位于
(3)用vscode打开
(4)点击vscode右下方的
(5)访问
运行调试之后也看到了跟之前一样的规律调用:
看样子循环调用路径是:
Vue的
那么根据调用栈往回查找根源:
可以看到最终的根源是因为
如果移除vconsole,就能够看到控制台输出的警告信息:
所以如果使用vconsole遇到Maximum call stack size exceeded异常问题,记得考虑有可能是因为Vue的控制台输出(警告信息)导致与vconsole产生循环调用引起。