UglifyJS3中TypeError: sym.definition is not a function错误原因咨询
TypeError: sym.definition is not a function with UglifyJS3 & Destructuring Assignment
问题背景
我在使用UglifyJS3在线压缩工具时,遇到了一个棘手的错误:TypeError: sym.definition is not a function,触发场景是压缩包含数组解构赋值的简单JavaScript函数。
排查过程
- 为了定位问题根源,我把代码精简到了仍会触发错误的最简形式:
function f() { const a = Math.abs(2); const [b,c] = [2, 3]; } - 多次测试验证:
- 这段代码语法完全合法,但在工具默认配置下压缩必现错误;
- 移除函数内任意一行代码,或者去掉数组解构赋值语句,错误就会立即消失。
问题分析与结论
一开始我有几个疑问:这个错误具体是什么含义?问题是源于工具配置、uglify-es 3.3.9的bug,还是仅该在线工具的问题?
后来经@SparkFountain提示,我查到相关讨论指出这是uglify-es v3.3.10版本存在的问题,而该在线工具虽然标注的版本是v3.3.9,但实际运行的是v3.3.10。
目前虽然还没完全搞清楚错误的底层触发逻辑,但可以确定这是该在线工具(2019年8月时)的版本适配bug。
解决方案
如果想继续使用解构赋值并正常压缩代码,建议更换其他UglifyJS3压缩工具,或者使用避开v3.3.10的正确版本uglify-es。
内容的提问来源于stack exchange,提问作者codechimp
相关产品推荐
相关产品推荐

