Grunt 0.4.5执行build时UglifyJS不支持计算属性名报错如何解决
问题根源
报错是Grunt 0.4.5配套的grunt-contrib-uglify插件内置的uglify-js版本过低,仅支持ES5语法,无法识别ES2015引入的计算属性名语法。本地调试时没有触发压缩流程,浏览器原生支持ES6所以运行正常,执行grunt build时会走代码压缩步骤,因此触发解析错误。
由于团队禁止升级Grunt版本,高版本的grunt-contrib-uglify不兼容Grunt 0.4.5,因此升级压缩插件的方案不可行,修改代码写法是成本最低的解决方式。
最优解决方案(零配置修改,风险最低)
把动态属性从对象字面量里拆出来,用ES5支持的方括号赋值语法单独添加,修改后的代码如下:
var params = { "dateRange": { "start": localObject.startPropertyValue, "end": localObject.endPropertyValue } }; // 追加动态键值对 params[localObject.propertyValue] = localObject.otherPropertyValue;
这种写法完全兼容ES5规范,老版本uglify可以正常解析,功能和原来的计算属性写法完全一致,不会产生任何逻辑差异。
可选备选方案(仅适用于项目存在大量ES6语法的场景)
如果项目里已经配置了grunt-babel转译流程,可以调整构建任务顺序,先把所有JS代码转成ES5语法再执行uglify压缩。如果之前没有配置Babel,不建议为了这一处修改新增构建流程,避免影响其他原有功能。
内容的提问来源于stack exchange,提问作者gringogordo
相关产品推荐
相关产品推荐

