我们最近从Dojo 1.10升级到Dojo 1.16。(是的,最近。)这是一个较新版本的闭包编译器,这很好,因为我们的构建经常被数组中可以接受的后缀逗号破坏。但是现在业务已经允许我们只支持版本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不认识到这一点,因此我们的代码会给出一个语法错误。
我已经对此做了大量的搜索,无法确定是否有任何配置可以应用到闭包中,以具体地阻止这种情况。目前,我看到的唯一解决办法是:
通过查看现有的配置,我找到了这些配置,并尝试将它们添加到优化器选项中:
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,它只是将问题推迟到将来某个未知的点。
发布于 2021-01-23 21:32:47
IE11不支持EcmaScript 6*,请确保使用的是适当的"language_out",即"ECMASCRIPT5“,编译器会将其转换为IE11所理解的内容。
* ES6语法和库IE11像let和const一样理解什么,它这样做的方式不符合规范。
https://stackoverflow.com/questions/65627852
复制相似问题