我在源代码上使用 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
您可以将多行错误的内容添加为在它们前面加上 #
的注释但只有第一行将用于匹配。
如果这是您需要的,您可以通过以下两种方式之一获取二进制文件:
- 获取补丁源并自行构建二进制文件:ihsoft/closure-compiler - Wiki
- 获取预构建的编译器二进制文件:ihsoft/closure-compiler - Release v1.0-tuned
关于javascript - 抑制或解决 goog.base 中的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29529993/