2017-04-11 45 views
2

以前,我一直在使用下面的生成腳本,以編譯關停項目:Closure編譯器的依賴性比計算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 

這工作正常,但產生以下的輸出:

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 

多次試驗後,我終於得到了編譯器正常工作(包括必要的goog.庫):

# 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 

這會產生類似的編譯代碼(某些部分被重新排序,某些變量名稱被更改,但沒有重要區別)。然而,構建腳本2需要大約運行50%(與30秒相比45秒)。

我的構建腳本2在某種程度上不正確/效率低於它應該是什麼?如果沒有,爲什麼顯着較慢的編譯方法「首選」?

回答

0

所有的代碼實際上都被封閉編譯器解析,而封閉構建器使用正則表達式匹配(我相信)。

關閉構建器不包括許多現代依賴項,如CommonJS或ES6模塊 - 因此遷移。

+0

是的,但這基本上意味着: 1.使用生成器生成釐米 2.將僅生成的釐米通過關閉 –

+0

此答案是5年,不再準確。 –

+0

也許在細節上,但總的來說它是ls。閉包構建器可以預先過濾它需要傳遞給編譯器的文件。如果你使用一個原始的閉包編譯器,它非常慢。 –