javascript - 抑制或解决 goog.base 中的编译器错误

标签 javascript google-closure-compiler google-closure

我在源代码上使用 Closure Compiler,最近决定通过 --jscomp_warning=reportUnknownTypes 启用最严格的模式。 las,它在 goog.base 本身内部触发了很多警告!我已经修复了我自己的代码中的所有问题,现在我正在寻找一种方法来消除/消除闭包库代码中的错误。

我试图修复 base.js 中的错误,但很快意识到这是不可行的。文件中大约有 108 个错误,在大多数情况下它们是真正的错误,因为 goog.base 不太关心类型:通常的做法是定义类似 {?}{*} 的类型。

我还尝试使用 --warnings_whitelist_file 来消除我不关心的警告,但它也没有用。对于错误:

..\js\google\base.js:204: 警告 - 无法确定此表达式的类型 当前[部分] = opt_object; ^

我在白名单文件中尝试了不同的形式,但都没有奏效:

..\\js\\google\\base.js:204 无法确定此表达式的类型 ..\\js\\google\\base.js:204 警告 - 无法确定此表达式的类型 ..\js\google\base.js:204 无法确定此表达式的类型 ..\js\google\base.js:204 警告 - 无法确定此表达式的类型 ../js/google/base.js:204 无法确定此表达式的类型 ../js/google/base.js:204 警告 - 无法确定此表达式的类型 ..\js\google\base.js:204 警告 - 无法确定此表达式的类型 当前[部分] = opt_object;

有没有人有一个可行的解决方案来启用此模式并且不会被闭包库本身的错误所困扰?

我使用最新的 Closure 编译器,它是: 版本:v20150315 建立于:2015/03/17 14:18

最佳答案

因此,我决定在 base.js 中采用静音警告的方式。 .为此,我调查了编译器源代码(感谢作者,它是开源的),我发现标志描述与其实际效果不符。描述说:

A file containing warnings to suppress. Each line should be of the form <file-name>:<line-number>? <warning-description>

但实际上这个守卫会拦截匹配的错误并将它们转换为警告。此外,行号被完全忽略。我看不到在这种行为中使用此标志,但我敢打赌作者有充分的理由以这种方式实现它。

无论如何,我从主分支中 fork 出来并修复了 flag 的行为。现在匹配的错误和警告实际上被抑制(沉默)。现在在匹配中考虑行号。

白名单文件的语法与错误/警告输出非常相似。例如,如果您收到如下错误(或警告):

..\js\google\base.js:120: ERROR - could not determine the type of this expression if (goog.getObjectByName(namespace)) { ^

则白名单文件中的相关记录为:

..\js\google\base.js:120 could not determine the type of this expression

您可以将多行错误的内容添加为在它们前面加上 # 的注释但只有第一行将用于匹配。

如果这是您需要的,您可以通过以下两种方式之一获取二进制文件:

关于javascript - 抑制或解决 goog.base 中的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29529993/

相关文章:

javascript - 如何使用 frog 将 javascript 转换为 dart?

javascript - 如何重定向到 chrome-devtools ://protocol?

javascript - 如何更新发散堆积条形图d3js中的数据

javascript - 将子对象的父对象添加到监听器会导致 Node.js 中的保留循环吗?

javascript - 在 Grunt 任务中运行命令

javascript - 如何同时使用 goog.provide 和 @externs?

javascript - 将 NodeList 转换为 Array.<HTMLElement> 在 javascript 中

javascript - 选择 JS 框架(从 Mootools 切换到 Closure 或 Dojo)

javascript - 使用 Google Closure 定义配置对象的最佳方式

javascript - goog.provide() - 未捕获的语法错误 : Unexpected token ILLEGAL