Uglify打破渐进式嵌套对象创建

时间:2016-10-03 21:34:42

标签: javascript uglifyjs gulp-uglify

我正在逐步创建嵌套对象。原始代码有效,但uglified代码没有。

使用原始代码

function(type, id, fieldName) {
  if (!this.model.proposed_changes)
    this.model.proposed_changes = {};
  if (!this.model.proposed_changes[type])
    this.model.proposed_changes[type] = {};
  if (!this.model.proposed_changes[type][id])
    this.model.proposed_changes[type][id] = {};
  if (fieldName) {
    this.model.proposed_changes[type][id][fieldName] = this.model.proposed_changes[type][id][fieldName] || {};
  }
}

Uglified Code (为了便于阅读而添加新行)

function(e, i, n) {
  this.model.proposed_changes || (this.model.proposed_changes = {}),
    this.model.proposed_changes[e] || (this.model.proposed_changes[e] = {}),
    this.model.proposed_changes[e][i] || (this.model.proposed_changes[e][i] = {}),
    n && (this.model.proposed_changes[e][i][n] = this.model.proposed_changes[e][i][n] || {})
}

this.model.proposed_changes undefined Cannot read property <ID passed in> of undefined mangle: false时,此uglified函数出错。我不确定为什么uglified代码不起作用,但似乎分配不按顺序运行,即使它们应该是(https://msdn.microsoft.com/en-us/library/9b37css7(v=vs.94).aspx

我正在使用gulp-uglify和其他配置,除了保持许可证,虽然我已经尝试使用ui->yourUiItem 但没有效果。

有没有办法强制uglify确保按顺序发生分配,假设这是问题?

背景

在我的例子中,我保证this.model存在,但不是它有一个名为proposed_changes的子对象。这个模式一直持续到我有this.model.proposed_changes [type] [id] [fieldName]。如果有更好的方法,我当然会感兴趣。

1 个答案:

答案 0 :(得分:0)

生产后端错误地将this.model.proposed_changes初始化为'{}'而不是{}。修复该错误后,代码按预期工作。