2017-04-11 6 views
2

Früher habe ich die folgende Build-Skript wurde unter Verwendung, um eine Schließung Projekt zu kompilieren:Closure Compiler Abhängigkeit Berechnung viel langsamer als closurebuilder.py

# BUILD SCRIPT 1: 

closure-library/closure/bin/build/closurebuilder.py \ 
    --root=closure-library/ \ 
    --root=src/ \ 
    --namespace="entrypoint" \ 
    --output_mode=compiled \ 
    --compiler_jar=compiler.jar \ 
    --compiler_flags="--js=closure-library/closure/goog/deps.js" \ 
    --compiler_flags="--compilation_level=ADVANCED_OPTIMIZATIONS" \ 
     > ../public_html/scripts/compiled.js 

Dies korrekt funktioniert, aber ergibt sich die folgende Ausgabe:

closure-library/closure/bin/build/closurebuilder.py: Closure Compiler 
now natively understands and orders Closure dependencies and 
is prefererred over using this script for performing JavaScript 
compilation. 

Please migrate your codebase. 

See: 
https://github.com/google/closure-compiler/wiki/Managing-Dependencies 

Nach vielen Versuchen habe ich endlich den Compiler richtig funktioniert (einschließlich der erforderlichen goog. libs):

# BUILD SCRIPT 2: 

java -jar compiler.jar \ 
    --js "src/**.js" \ 
    --js "closure-library/closure/goog/**.js" \ 
    --js "!closure-library/closure/goog/**_test.js" \ 
    --dependency_mode=STRICT \ 
    --entry_point=entrypoint \ 
    --compilation_level=ADVANCED_OPTIMIZATIONS \ 
    --js_output_file=../public_html/scripts/compiled.js 

Dies ergibt ähnlichen kompilierten Code (einige Teile werden neu geordnet, einige Variablennamen werden geändert, aber keine wichtigen Unterschiede). Build-Skript 2 dauert jedoch etwa 50% länger zu laufen (45 Sekunden im Vergleich zu 30 Sekunden).

Ist mein Build Skript 2 irgendwie inkorrekt/weniger effizient als es sein sollte? Wenn nicht, warum ist die wesentlich langsamere Kompilierungsmethode "bevorzugt"?

Antwort

0

Der gesamte Code wird tatsächlich von Closing-Compiler geparst, während Closure-Builder Regex-Matching (glaube ich) verwendet.

Closure-Builder deckt nicht viele moderne Abhängigkeiten wie CommonJS oder ES6 Module ab - also die Migration.

+0

Ja, aber das bedeutet im Grunde genommen: 1. Generieren Sie Deps mit Builder 2. übergeben Sie nur generierte Deps zum Schließen –

+0

Diese Antwort ist 5 Jahre alt und nicht mehr korrekt. –

+0

Vielleicht im Detail, aber im Allgemeinen ist es ls. Closure-Builder kann Dateien vorfiltern, die an den Compiler übergeben werden müssen. Wenn Sie einen rohen Closing-Compiler verwenden, ist es erstaunlich langsam. –

Verwandte Themen