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' ...」? –