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

SoyToJsSrcCompiler生成一个js文件,该文件是这样的:预编译Closure模板 - 在关闭编译器警告“变量之前声明中引用的”

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 = {}; } 

如何清除此警告?

+0

尝试:'var templates = templates || {}; templates.simple = templates.simple || {};' – elclanrs

+0

@elclanrs这段代码由SoyToJsSrcCompiler生成。每当模板发生变化时,我都必须对其进行编辑 –

回答

6

一个解决办法是在一个实习医生文件,声明变量:

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

但大豆编译器应该是固定的。我希望人们看不到这一点,因为你通常用封库使用它,并在该模式下,大豆编译器应该产生:

goog.provide('template.simple') 
+0

非常感谢John,此解决方法的确做到了这一点:) –

+1

只要在源模板之前列出,您也应该能够在源代码中包含此定义。 – John

1

如果您使用的是Closure编译器与大豆,你应该通过两种--shouldProvideRequireJsFunctions--shouldProvideRequireJsFunctions。否则,它假定你不打算使用编译器并生成浏览器可以理解的代码,但是如果不是这样的话。如果没有这些标志传递,我们一般不会测试它们的编译器,至少使其中一个标志是强制的,因为如果没有它们,它确实无法正常工作)

+0

您的意思是:“...或者--shouldProvideRequireJsFunctions'或'--shouldProvideRequireSoyNamespaces' ...”? –