Closure Compiler - 使用jQuery和Closure进行源代码的混合编译

时间:2014-02-10 09:51:38

标签: javascript jquery google-closure-compiler google-closure

我正在将项目从jQuery迁移到Closure。我有一些代码只有半迁移,我想编译。未编译的源工作正常。我想知道使用SIMPLE_OPTIMIZATIONS编译它的编译命令。

基于jQuery的原始代码的编译命令是:

java -jar ~/closure/closure-compiler/build/compiler.jar \
  --js ~/Sites/mysite/js/bc_school6_2.js \
  --js ~/Sites/js_common/bc.job_school.js \
  --js ~/Sites/js_common/bc_help.js \
  --js ~/Sites/js_common/validation.js \
  --js ~/Sites/js_common/md5.js \
  --js ~/Sites/js_common/chosen.jquery.js \
  --js ~/Sites/js_common/jquery.reveal.js \
  --js ~/Sites/js_common/printArea.js 
  > ~/Sites/mysite/js-minified/bc_school6_2s.js 

完全迁移源的SIMPLE_OPTIMIZATIONS编译命令就是这样(尽管完全迁移的代码将使用ADVANCED_OPTIMIZATIONS):

closure-library/closure/bin/build/closurebuilder.py \
  --root=closure-library/ \
  --root=closure-templates/javascript/ \
  --root=bc/ \
  --namespace="bc.bc_school6_2" \
  --output_mode=compiled \
  --compiler_jar=closure-compiler/build/compiler.jar \
  --compiler_flags="--compilation_level=SIMPLE_OPTIMIZATIONS" \
  > ~/Sites/mysite/js-minified/bc_school6_2s.js

目前,命名空间没有在源代码中正确设置,因此后一个编译过程无法正常工作。

是否可以使用Google Closure库编译源代码,然后从js_common文件夹中添加所有jQuery文件?我可以在一个编译命令中执行它,或者如果没有,我可以编译我的goog代码,然后合并jQuery材料吗?

感谢。

1 个答案:

答案 0 :(得分:2)

您可以编译goog代码,然后将jQuery代码作为外部代码包含在内。此方法还允许您在ADVANCED MODE中编译代码,并且仍然可以在其原始格式中使用jQuery

为此,您必须使用包含所有extern声明的.js文件。然后使用--externs标志告诉闭包编译器在哪里寻找外部。请参阅以下示例用法:

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS \
     --js makeallnotes.js --externs extern1.js --externs extern2.js

要了解有关如何声明外部的更多信息,请参阅此tutorial。基本上,它们用于告诉闭包编译器您正在使用的外部API或库。

Google Closure源代码中实际包含jQuery个extern文件。找到您使用on this pagejQuery版本。

另外,我会考虑使用Plovr构建您的Closure Project。它允许您使用配置文件来设置所有构建参数,并且如果您经常构建代码,将节省大量时间。