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

SoyToJsSrcCompiler erzeugt eine js-Datei, die wie folgt aussieht:vorkompilierte Closure Templates - "Variable verwiesen vor Deklaration" Warnung in Closure Compiler

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) { 
    ..... 
}; 

ich Closure Compiler bin mit mit --warning_level=VERBOSE und --compilation_level ADVANCED_OPTIMIZATIONS

und ich erhalte diese Warnung:

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

Wie kann ich diese Warnung löschen?

+0

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

+0

@elclanrs Dieser Code wurde von SoyToJsSrcCompiler generiert. Ich würde es jedes Mal ändern müssen die Vorlagen ändern –

Antwort

6

Eine Abhilfe ist, die Variablen in einer Externen Datei zu erklären, mit:

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

Aber die Soja-Compiler festgelegt werden sollen. Ich erwarte, dass die Menschen das nicht sehen, weil Sie es in der Regel mit Closure-Bibliothek verwenden und in diesem Modus die Soja-Compiler ist zu Erzeugung:

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

Vielen Dank John, hat diese Problemumgehung den Trick :) –

+1

Sie sollten auch in der Lage sein, diese Definition in Ihre Quellen aufzunehmen, solange es vor den Vorlage Quellen aufgeführt ist . – John

1

Wenn Sie den Closure Compiler mit Soja verwenden, sollten Sie passieren entweder --shouldProvideRequireJsFunctions oder --shouldProvideRequireJsFunctions. Andernfalls wird davon ausgegangen, dass Sie keinen Compiler verwenden und Code generieren, den die Browser verstehen, ansonsten aber unpassend sind.

(Quelle: Ich helfe den Soy-Compiler beizubehalten. Wir testen sie im Allgemeinen nie, ohne dass eines dieser Flags übergeben wird. Es könnte Sinn machen, mindestens eines dieser Flags obligatorisch zu machen, weil es ohne sie wirklich nicht funktioniert .)

+0

Meinten Sie: "... entweder' --shouldProvideRequireJsFunctions' oder '--shouldProvideRequireSoyNamespaces' ..."? –