Google Closure Compiler


Startseite Einleitung Funktionsweise Verwendung Kompiliergrade Arbeiten mit advanced_optimizations Fazit

Arbeiten mit der advanced_optimization

Übersicht:





Externs

Um auch Bibliotheken und externe Funktionen in seinem eigenen JavaScript-Programm nutzen zu können ist man auf die sogenannten Externs angewiesen.
Diese Funktionieren ähnlich wie Header-Dateien, die man aus C kennt. Es handelt sich also um eine JavaScript-Datei, die ausschließlich Funktionsdeklarationen enthält. Also Zeilen der Art:

function name(parameterliste){};

Diese Externs-Datei kann dann dem Closure Compiler über den Parameter js_externs mitgegeben werden.
Alle hier deklarierten Funktionen werden vom Closure Compiler nicht umbenannt. Problematisch ist es jedoch wenn der Entwickler einer Bibliothek keine Externs-Datei zur Verfügung stellt. Denn dann muss man selbst den Aufwand treiben eine solche zu erstellen. Zumindest gibt es
eine Sammlung von Externs für die gängisten Bibliotheken.



Exports

Exports sind eine etwas elegantere Alternative zu den Externs und sollten unbedingt genutzt werden, wenn man erwartet, dass sein eigenes Programm von anderen Entwicklern genutzt wird.
Dafür gibt es zwei Gründe:

Exports machen sich zunutze, dass der Closure Compiler Strings ignoriert. Sie funktionieren indem man die Funktionen, welche extern erreichbar sein sollen, als Attribut an das globale Objekt window bindet.

window['externerBezeichner'] = externerBezeichner;



Getyptes JavaScript mit dem Closure Compiler

Eine recht interessante Option des Google Closure Compilers ist es, JavaScript so zu verwenden, als wären Variablen statisch getypt.
Der Parser entfernt zwar alle Kommentare, jedoch überprüft er vorher ob diese JSDoc-Tags beinhalten und gibt diese als Attribut mit dem AST weiter. Der Closure Compiler verwendet diese Attribute um bestimmte Überprüfungen zur Kompilierzeit durchführen zu können. So kann man es erreichen, dass der Compiler anmerkt, wenn man "Typdeklarationen" im laufe des Programmes verletzt.

Einige interessante JSDoc-Tags:

Also kann man eine Variablendeklaration wie folgt vornehmen:
/**
* Eine Stringvariable
*@type {string}
*/
var stringvariable;

Der Closure Compiler würde beim Kompilieren anmerken wenn entsprechende Vorgaben verletzt werden.

Eine vollständige Liste aller JSDoc-Tags die der Closure Compiler nutzt.





Startseite Einleitung Funktionsweise Verwendung Kompiliergrade Arbeiten mit advanced_optimizations Fazit