首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dojo中的闭包编译器使用对象属性值速记在IE11中创建语法错误。

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

Stack Overflow用户
提问于 2021-01-08 11:06:29
回答 1查看 112关注 0票数 0

我们最近从Dojo 1.10升级到Dojo 1.16。(是的,最近。)这是一个较新版本的闭包编译器,这很好,因为我们的构建经常被数组中可以接受的后缀逗号破坏。但是现在业务已经允许我们只支持版本11的IE了,我们可以升级了。

我很高兴我们能够使用更多的ES6,因为以前的闭包不允许let、const等。但是,当考虑到这个结构时:

代码语言:javascript
复制
return {l: l, t: t, w: node.offsetWidth + me.w, h: node.offsetHeight + me.h};

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

代码语言:javascript
复制
return{l,t:g,w:a.offsetWidth+c.w,h:a.offsetHeight+c.h}};

问题是,它使用有效的ES6简写将l: l简化为l,但是IE11不认识到这一点,因此我们的代码会给出一个语法错误。

我已经对此做了大量的搜索,无法确定是否有任何配置可以应用到闭包中,以具体地阻止这种情况。目前,我看到的唯一解决办法是:

  1. 只使用简单的优化(可能是一段代码来防止这种情况),因此优化器不会这么做(非常不愿意这样做,因为它是Dojo库中的代码,我不清楚这会发生在多少地方)
    1. 以某种方式改变了闭包活动?(如果没有配置选项,我可能不知道如何/能力这样做)

通过查看现有的配置,我找到了这些配置,并尝试将它们添加到优化器选项中:

代码语言:javascript
复制
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,它只是将问题推迟到将来某个未知的点。

EN

回答 1

Stack Overflow用户

发布于 2021-01-23 21:32:47

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

* ES6语法和库IE11像letconst一样理解什么,它这样做的方式不符合规范。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65627852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档