【问题标题】:Closure compiler dependency calculation much slower than closurebuilder.py闭包编译器依赖计算比closurebuilder.py慢得多
【发布时间】:2017-04-11 07:27:55
【问题描述】:

以前,我一直在使用以下构建脚本来编译 Closure 项目:

# 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. 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

这会产生类似的编译代码(某些部分被重新排序,一些变量名称被更改,但没有重要的区别)。但是,构建脚本 2 的运行时间约为 50%(45 秒与 30 秒相比)。

我的构建脚本 2 是否不正确/效率低于应有的水平?如果不是,为什么“首选”显着慢的编译方法?

【问题讨论】:

    标签: google-closure-compiler google-closure-library


    【解决方案1】:

    所有代码实际上都由闭包编译器解析,而闭包构建器使用正则表达式匹配(我相信)。

    Closure-builder 不涵盖许多现代依赖项,例如 CommonJS 或 ES6 模块 - 因此迁移。

    【讨论】:

    • 是的,但这基本上意味着:1. 使用 builder 生成 deps 2. 仅将生成的 deps 传递给闭包
    • 这个答案已有 5 年历史,不再准确。
    • 可能在细节上,但总的来说是ls。闭包构建器可以预过滤它需要传递给编译器的文件。如果你使用原始的闭包编译器,它会非常慢。
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 2012-11-06
    • 1970-01-01
    • 2017-08-04
    • 2020-02-14
    • 2013-04-21
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多