2016-09-26 1 views
1

Ich habe eine Website, die verschiedene Javascript-Plugins verwendet, und eine Reihe von js-Dateien (~ 30) ausführen. Ich wollte versuchen, diese js-Dateien in einer einzigen Datei zu gruppieren, und versuchte, eine grundlegende Verkleinerung (nur Entfernen von Leerzeichen) mit Googles Closure Compiler zu übernehmen.Gruppierung js Dateien gibt eine seltsame js Fehler

Ich habe alle js-Dateien, in der gleichen Reihenfolge, wie sie in meiner Seite enthalten sind, in die Online-Version von Closure Compiler eingeführt, und führen Sie die Kompilierung. Die Parameter für die Zusammenstellung sahen so aus:

// ==ClosureCompiler== 
// @output_file_name default.js 
// @compilation_level WHITESPACE_ONLY 
// .... bunch of javascript files here 
// ==/ClosureCompiler== 

Die Kompilation lief mit Erfolg, es gab weder Warnungen noch Fehler. Ich habe dann die Ergebnisdatei abgerufen, auf meinen Server kopiert und versucht, sie in meine Seite aufzunehmen.

Die Seite läuft, aber ein seltsamer Fehler angezeigt, die es meinen Javascript in der Mitte stoppt ist Betrieb:

TypeError: event.feature.values_ is undefined 

Ich habe versucht, den Raum zu holen, wo dieser Fehler passiert, wird der Code noch sieht so etwas wie diese:

this.vectorLayer.getSource().on("addfeature",function(event){if(typeof event.feature.values_.type=="undefined")return; 

Dies ist etwas, das mein eigener JavaScript-Code tut, aber dieser Teil des Codes sollte nicht einmal laufen, wenn die Seite geladen wird. Wenn ich die separaten Javascript-Dateien verwende, lädt die Seite nur sehr stark, ohne Fehler, aber mit dem entfernten Leerzeichen und den kombinierten Dateien erscheint dieser Fehler.

Mit Grundlogik, ich habe gelernt, dass durch Hinzufügen der .js Dateien in der gleichen Reihenfolge, in der sie auf meiner Seite enthalten sind, und nur die Leerzeichen zu entfernen, um eine kleinere Dateigröße sollte keine Fehler führen , da der Browser die js-Dateien sowieso synchron lädt. Täusche ich mich in dieser Hinsicht? Wenn nicht, was könnte der mögliche Grund für diesen Fehler sein?

EDIT 1:

Okay, so verengt ich das Problem auf eine einzige .js Datei herunter, die JavaScript-Datei von OpenLayers. Wenn ich diese Datei nicht kompiliere und sie separat einfüge, funktioniert alles gut. Was könnte dieses seltsame Problem verursachen?

+1

Auch das Entfernen von Leerzeichen aus einer Datei kann JavaScript beschädigen. Zum Beispiel, wenn es die Methode 'toString()' einer Funktion für die Reflexion verwendet, die leicht durch Entfernen von Leerstellen brechen kann. –

+0

Warum verlassen Sie sich auf 'event.feature.values_'? Warum verwenden Sie keine API-Methode? –

+0

@ JonatasWalker könnten Sie erarbeiten? Welche API-Methode? –

Antwort

1

Wie sich herausstellt, wurde dies durch einen seltsamen Caching-Mechanismus auf der Seite von Google verursacht. Neustart der Closure Compiler, und wieder alle js-Dateien wieder einführen, dann neu kompilieren, löste mein Problem.

Danke für die Kommentare Jungs!

+0

Sie sollten Ihre eigene Antwort akzeptieren. Dies ist ein definitives Problem mit der Online-Version. –

+0

Und vielleicht einen Fehlerbericht unter https://github.com/google/closure-compiler/issues/ einreichen, zumal Sie so viel Zeit damit verbracht haben, einen Testfall herauszufinden – owler