我在 FreeNAS 团队的错误跟踪器上向 FreeNAS 团队报告了一个 Javascript 错误,与他们即将发布的版本有关,由于在一些不太常见的浏览器上出现 JS 语法错误,该版本无法工作,但我很好奇为什么这是一个错误。
该代码片段在 Win8.1 默认浏览器(IE11)和 Pale Moon(基于 Firefox)浏览器上引发了一个非常明确的错误,但在 Firefox 或 Vivaldi(基于 Chrome)上没有错误。代码实际上做了什么,为什么它会在这些浏览器中触发保留字错误/语法错误?
代码很难追踪,它看起来像一个 webpack 缩小文件,我对基础 + 构建系统不够熟悉,无法在打包之前跟踪它的最终来源。
触发错误的相关代码片段在浏览器控制台中如下所示:
webpackJsonp([20], {
... long list of function defs ...
BFiu: function(t, e, n) {
"use strict";
n.d(e, "a", function() {
return r
});
var o = n("HcJ8");
n.n(o);
let i = {
Queue: 0,
Uploading: 1,
Done: 2,
Cancelled: 3
};
i[i.Queue] = "Queue",
i[i.Uploading] = "Uploading",
i[i.Done] = "Done",
i[i.Cancelled] = "Cancelled";
class r {}
},
... more function defs ...
},
[0]);
根据 JS 控制台,这是class r{}
在某些浏览器中导致致命语法错误并终止 GUI 加载脚本的行。Pale Moon 指出问题是滥用保留字“class”,IE11 只是指向同一个字并报告语法错误。但是在其他浏览器上它很好。
直觉上,我希望即使在臭名昭著的不同浏览器和 JS 引擎(显然不是?)中,对这样一个关键 JS 词的保留词滥用也会得到相当明确的定义,所以我很感兴趣。这是怎么回事?
理想情况下(如果能够提供帮助),如何找到此代码片段的上游源代码,以便查看其问题/错误跟踪器?
源代码:代码片段来自 FreeNAS 11.2-RC2 中的文件“main.57ebfd2da123881a1a70.bundle.js”。我已经在 FreeNAS 构建/WebUI 系统中跟踪到该文件的第 69 行,其中文件名显然在 webpack 构建它时被引用,但我不知道如何追溯到它的起源,看看哪个这个片段来自的模块,或者如果有关于该模块来自的任何项目的上游错误报告。