缩小导致FF和IE中的重新声明错误

时间:2018-08-09 15:54:01

标签: javascript asp.net minify

我们遇到了NuGet软件包Microsoft.AspNet.Web.Optimization提供的压缩问题,因为let似乎有问题。压缩器以某种方式将变量bookingDefaultIndexi的名称设置为相同的名称(i)。这使Firefox和IE 11报告范围问题(Firefox报告SyntaxError: redeclaration of let i,IE 11报告Let/Const redeclaration),因为该变量已经定义。没有缩小,代码在IE和FF中就可以正常工作。 Chrome不会报告代码缩略的问题。

在以下代码段中,我用// [SO-COMMENT]开头的注释标记了相关行,因此您可以搜索该行以查看有问题的行。

这是导致问题的未缩小函数:

_handleDDLValuesByContext: function () {
            if (this.options.isCreate) {
                if (this.options.isChildCreation) {
                    //If we are creating a child ->
                    this.$ddlBookingType.val(this.options.data.BookingTypeID);
                    this.$ddlAllocationUnit.val(this.options.data.AllocationUnitID);
                    this.$ddlEffortAllocationUnit.val(this.options.data.AllocationUnitID);

                    if (this.options.data.ServiceCategoryID == null) {
                        this.$ddlServiceCategory.val('-1').trigger('change');
                        if (this.options.data.PricePerUnit != null) {
                            this.$structureRate.val(GetFormat(this.options.data.PricePerUnit));
                        }
                    } else {
                        this.$ddlServiceCategory.val(this.options.data.ServiceCategoryID).trigger('change');
                    }

                    //If we are creating a child, prefill his accounting type with the parent accounting type
                    if (this.options.data.AccountingTypeID == null) {
                        this.$ddlAccountingType.val('-1').trigger('change');
                    } else {
                        this.$ddlAccountingType.val(this.options.data.AccountingTypeID).trigger('change');
                    }
                } else {
                    //If it's parent creation ->
                    let bookingTypes = this.options.structureSpecificData.BookingTypes;
                    let bookingDefaultID = null;
                    // [SO-COMMENT] the following variable is minified to 'i'
                    let bookingDefaultIndex = null;
                    for (let i = 0, len = bookingTypes.length; i < len; i++) {
                        if (bookingTypes[i].IsDefault) {
                            bookingDefaultID = bookingTypes[i].ID;
                            bookingDefaultIndex = i;
                        }
                    }

                    let allocationTypes = this.options.structureSpecificData.AllocationUnitTypes;

                    if (bookingDefaultID == null) {
                        //In case there's no default booking type id, we set the booking types, allocations and effort allocations to their first available value
                        this.$ddlBookingType.val(bookingTypes[0].ID);
                        this.$ddlAllocationUnit.val(allocationTypes[0].ID);
                        this.$ddlEffortAllocationUnit.val(allocationTypes[0].ID);
                    } else {
                        let allocationDefaultID = null;
                        
                        this.$ddlBookingType.val(bookingDefaultID).trigger('change');

                        allocationTypes = [];
                        let bookings = this.options.structureSpecificData.BookingTypes;
                        let allocations = this.options.structureSpecificData.AllocationUnitTypes;
                        
                        // [SO-COMMENT] this is the 'original' i
                        for (let i = 0, len = allocations.length; i < len; i++) {
                            if (allocations[i].BaseUnitID == bookings[bookingDefaultIndex].BaseUnitID) {
                                allocationTypes.push(allocations[i]);
                            }
                        }

                        for (let i = 0, len = allocationTypes.length; i < len; i++) {
                            if (allocationTypes[i].IsDefault) {
                                allocationDefaultID = allocationTypes[i].ID;
                            }
                        }

                        if (allocationDefaultID == null) {
                            this.$ddlAllocationUnit.val(allocationTypes[0].ID);
                            this.$ddlEffortAllocationUnit.val(allocationTypes[0].ID);
                        } else {
                            this.$ddlAllocationUnit.val(allocationDefaultID);
                            this.$ddlEffortAllocationUnit.val(allocationDefaultID);
                        }
                    }
                    this.$ddlServiceCategory.val('-1');
                }
            } else {
                //If we are edditing ->
                this.$ddlBookingType.val(this.options.data.BookingTypeID);
                this.$ddlAllocationUnit.val(this.options.data.AllocationUnitID);
                this.$ddlEffortAllocationUnit.val(this.options.data.AllocationUnitID);
                if (this.options.data.IsParentElement) {
                    this.$ddlServiceCategory.val('-1').trigger('change');

                    //We have to check against a NaN type since the effort and the total cost can be of that type 
                    //in case we have a structure hierarchy with an accounting type of fixed price and therefore no effort and cost
                    if (isNaN(this.options.structureTotalCost)) {
                        this.$structureTotalCost.val('');
                    } else {
                        this.$structureTotalCost.val(GetFormat(this.options.structureTotalCost));
                    }

                    if (isNaN(this.options.structureEffort)) {
                        this.$structureEffortUnits.val('');
                    } else {
                        this.$structureEffortUnits.val(GetFormat(this.options.structureEffort));
                    }
                } else {
                    if (this.options.data.ServiceCategoryID == null) {
                        this.$ddlServiceCategory.val('-1').trigger('change');
                        if (this.options.data.PricePerUnit != null) {
                            this.$structureRate.val(GetFormat(this.options.data.PricePerUnit));
                            this._checkTotalCostCalculation();
                        }
                    } else {
                        if (this.options.data.PricePerUnit !== null) {
                            this.$structureRate.val(GetFormat(this.options.data.PricePerUnit));
                            this.$ddlServiceCategory.val(this.options.data.ServiceCategoryID);
                            this._checkTotalCostCalculation();
                        } else {
                            this.$ddlServiceCategory.val(this.options.data.ServiceCategoryID).trigger('change');
                        }
                    }
                }

                //Since we are editing we should prefill the accounting type with the accounting id and the fixed price too if it exists
                //And not trigger anything
                if (this.options.data.AccountingTypeID == null) {
                    this.$ddlAccountingType.val('-1').trigger('change');
                } else {
                    this.$ddlAccountingType.val(this.options.data.AccountingTypeID).trigger('change');
                }
                if (isNaN(this.options.totalFixedPrice)) {
                    this.$fixedPrice.val('');
                } else {
                    this.$fixedPrice.val(GetFormat(this.options.totalFixedPrice));
                }
                
            }
        }

这是缩小版:

_handleDDLValuesByContext: function() {
                if (this.options.isCreate)
                    if (this.options.isChildCreation) this.$ddlBookingType.val(this.options.data.BookingTypeID), this.$ddlAllocationUnit.val(this.options.data.AllocationUnitID), this.$ddlEffortAllocationUnit.val(this.options.data.AllocationUnitID), this.options.data.ServiceCategoryID == null ? (this.$ddlServiceCategory.val("-1").trigger("change"), this.options.data.PricePerUnit != null && this.$structureRate.val(GetFormat(this.options.data.PricePerUnit))) : this.$ddlServiceCategory.val(this.options.data.ServiceCategoryID).trigger("change"), this.options.data.AccountingTypeID == null ? this.$ddlAccountingType.val("-1").trigger("change") : this.$ddlAccountingType.val(this.options.data.AccountingTypeID).trigger("change");
                    else {
                        let t = this.options.structureSpecificData.BookingTypes,
                            i = null, // [SO-COMMENT] this shouldn't be named i
                            r = null;
                        for (let n = 0, u = t.length; n < u; n++) t[n].IsDefault && (i = t[n].ID, r = n);
                        let n = this.options.structureSpecificData.AllocationUnitTypes;
                        if (i == null) this.$ddlBookingType.val(t[0].ID), this.$ddlAllocationUnit.val(n[0].ID), this.$ddlEffortAllocationUnit.val(n[0].ID);
                        else {
                            let t = null;
                            this.$ddlBookingType.val(i).trigger("change");
                            n = [];
                            let f = this.options.structureSpecificData.BookingTypes,
                                u = this.options.structureSpecificData.AllocationUnitTypes;
                            for (let t = 0, i = u.length; t < i; t++) u[t].BaseUnitID == f[r].BaseUnitID && n.push(u[t]);
                            // [SO-COMMENT] here there is a second i that causes the problem
                            for (let i = 0, r = n.length; i < r; i++) n[i].IsDefault && (t = n[i].ID);
                            t == null ? (this.$ddlAllocationUnit.val(n[0].ID), this.$ddlEffortAllocationUnit.val(n[0].ID)) : (this.$ddlAllocationUnit.val(t), this.$ddlEffortAllocationUnit.val(t))
                        }
                        this.$ddlServiceCategory.val("-1")
                    } else this.$ddlBookingType.val(this.options.data.BookingTypeID), this.$ddlAllocationUnit.val(this.options.data.AllocationUnitID), this.$ddlEffortAllocationUnit.val(this.options.data.AllocationUnitID), this.options.data.IsParentElement ? (this.$ddlServiceCategory.val("-1").trigger("change"), isNaN(this.options.structureTotalCost) ? this.$structureTotalCost.val("") : this.$structureTotalCost.val(GetFormat(this.options.structureTotalCost)), isNaN(this.options.structureEffort) ? this.$structureEffortUnits.val("") : this.$structureEffortUnits.val(GetFormat(this.options.structureEffort))) : this.options.data.ServiceCategoryID == null ? (this.$ddlServiceCategory.val("-1").trigger("change"), this.options.data.PricePerUnit != null && (this.$structureRate.val(GetFormat(this.options.data.PricePerUnit)), this._checkTotalCostCalculation())) : this.options.data.PricePerUnit !== null ? (this.$structureRate.val(GetFormat(this.options.data.PricePerUnit)), this.$ddlServiceCategory.val(this.options.data.ServiceCategoryID), this._checkTotalCostCalculation()) : this.$ddlServiceCategory.val(this.options.data.ServiceCategoryID).trigger("change"), this.options.data.AccountingTypeID == null ? this.$ddlAccountingType.val("-1").trigger("change") : this.$ddlAccountingType.val(this.options.data.AccountingTypeID).trigger("change"), isNaN(this.options.totalFixedPrice) ? this.$fixedPrice.val("") : this.$fixedPrice.val(GetFormat(this.options.totalFixedPrice))
            }

我的Google搜索IIS缩小范围问题没有显示任何有用的结果。除了不使用let之外,我们还能尝试调查和解决此问题吗?

0 个答案:

没有答案