预编译的闭包模板 - 闭包编译器中的"Variable referenced before declaration"警告


java -jar SoyToJsSrcCompiler.jar --shouldGenerateJsdoc --outputPathFormat 
           simple.js --srcs simple.soy

SoyToJsSrcCompiler 生成一个 js 文件,如下所示:

if (typeof templates == 'undefined') { var templates = {}; }
if (typeof templates.simple == 'undefined') { templates.simple = {}; }
/**
 * @param {Object.<string, *>=} opt_data
 * @param {(null|undefined)=} opt_ignored
 * @return {string}
 * @notypecheck
 */
 templates.simple.tinyButton = function(opt_data, opt_ignored) {
     .....
 };

我正在使用带有--warning_level=VERBOSE--compilation_level ADVANCED_OPTIMIZATIONS的闭包编译器

我收到此警告:

simple.js:1: WARNING - Variable referenced before declaration: templates
if (typeof templates == 'undefined') { var templates = {}; }

如何清除此警告?

一种解决方法是使用以下命令在 externs 文件中声明变量:

/** @suppress {duplicate} */
var template;

但是应该修复 Soy 编译器。 我希望人们看不到这一点,因为您通常将其与闭包库一起使用,并且在该模式下,Soy 编译器应该生成:

goog.provide('template.simple')

如果您将闭包编译器与 Soy 一起使用,则应传递 --shouldProvideRequireJsFunctions--shouldProvideRequireJsFunctions 。否则,它会假设您不会使用编译器并生成浏览器可以理解但在其他方面有点不稳定的代码。

(来源:我帮助维护大豆编译器。我们通常从不测试它们编译器,而没有传递这些标志中的任何一个。使这些标志中的至少一个成为强制性标志可能是有意义的,因为没有它们它真的不能很好地工作。

最新更新