Dojo构建中的闭包编译器在IE11中使用对象属性值速记创建语法错误

wfveoks0  于 2022-12-08  发布在  Dojo
关注(0)|答案(1)|浏览(117)

我们最近从Dojo 1.10升级到了Dojo 1.16。(是的,最近。)这是一个新版本的Closure编译器,这很棒,因为我们的构建经常被数组中可接受的尾随逗号所破坏。但是现在业务允许我们只在版本11中支持IE,我们能够升级了。
我很高兴我们将能够使用更多的ES6,因为之前的闭包不允许let、const等。但是,当给出以下构造时:

return {l: l, t: t, w: node.offsetWidth + me.w, h: node.offsetHeight + me.h};

编译器将(可能?)将其简化为:

return{l,t:g,w:a.offsetWidth+c.w,h:a.offsetHeight+c.h}};

问题是它使用有效的ES6速记将l: l简化为l,但IE11无法识别这一点,因此我们的代码在此给出了语法错误。
我已经做了大量的搜索,但找不到任何配置可以应用到Closure来阻止这种情况。目前,我看到的唯一解决方案是:
1.仅使用简单的优化(可能不适合)
1.重写代码以防止出现这种情况,这样优化器就不会这样做(非常不愿意这样做,因为它是Dojo库中的代码,我不清楚会有多少个地方这样做)
1.以某种方式更改Closure活动?(如果没有配置选项,我可能不知道如何/有能力做到这一点)
在查看现有配置时,我发现了这些配置,并尝试将它们添加到优化器选项中:

optimizeOptions: {              
    'coalesceVariableNames': false, 
    'collapseProperties': false,
    'collapseVariableDeclarations': false,  
    'removeDeadCode': false,    
    'rewriteFunctionExpressions': false,
    'smartNameRemoval': false
},

这看起来确实有区别,但只是在某种意义上,它这次将代码转换为return{l:t,t:q,w:a.offsetWidth+m.w,h:a.offsetHeight+m.h}};,所以我不知道我是否真的修复了它,或者这一次它决定将变量l更改为t,它只是将问题推迟到未来的某个未知点。

xienkqul

xienkqul1#

IE11不支持EcmaScript 6*,请确保使用适当的“language_out”,即“ECMASCRIPT5”,编译器会将其转换为IE11能够理解的内容。

  • IE11理解的ES6语法和库(如letconst)并不符合规范。

相关问题