繁体   English   中英

使用Google Closure Compiler Application在一个文件中压缩所有文件.js

[英]Compress all file .js with Google Closure Compiler Application in one File

我想在命令行中使用Google Closure Compiler将所有文件.js压缩到一个文件中的同一目录中。

对于一个文件,它是:

java -jar compiler.jar --js test.js --js_output_file final.js

但是我没有在doc中找到如何在没有写入最后一个压缩文件的情况下将我的其他文件放在final.js的末尾?

我想要这样的东西:

java -jar compiler.jar --js --option *.js --js_output_file final.js

我可以或者必须执行一个程序,它将所有文件添加到文件中并在压缩之后? 谢谢你能帮助我!

java -jar path/to/closure-compiler/build/compiler.jar \ 
--js input_one.js \ 
--js input_two.js \ 
... \ 
--js_output_file compiled_output.js 

我尝试过Orbits的回答,但它并没有真正起作用,也许我使用的版本是更新的版本。 我使用的命令是:

java -jar compiler.jar --js file1.js file2.js file3.js  --js_output_file --js_output_file compiled_output.js. 

假设您已经在Mac上安装了带有Homebrew的Closure Compiler,您还可以连接所有文件,然后将它们传递给Closure(这也应该使用java -jar方式,但我还没有验证它):

cat $(ls scripts/*.js) | closure-compiler --js_output_file main.js

您可以使用KjsCompiler: https//github.com/knyga/kjscompiler 使用Google Closure Compiler应用程序以正确的顺序编译多个JavaScript文件

如何解决您的问题:1。为js文件添加注释,如下所示:

/** * @depends {lib/somefile.js} **/如果你不关心编译链,你可以忽略这一步。 2. java -jar kjscompile.jar

您可以在这里查看示例: https//github.com/knyga/kjscompiler/tree/master/examples

以下是包含多个输入文件的五种全局技术,其中包含从CommandLineRunner类中提取的文档:


(1)这是muka技术的变体,删除了--js标志,这是不需要的:

java -jar compiler.jar \
    --js_output_file build/out.js `find ./src/*.js`

来自文档:

--js标志名称是可选的,因为默认情况下args被解释为文件。

这将包括/src/所有.js文件,但不包括/src/子目录中的任何文件。


(2)类似于1 ,但将包含/src/ 及其所有子目录中的所有.js文件:

java -jar compiler.jar \
    --js_output_file build/out.js `find ./src/ -name '*.js'`

(3)类似于2 ,但使用xargs

find ./src/ -name '*.js' \
    | xargs java -jar compiler.jar \
                --js_output_file build/out.js \
                --manage_closure_dependencies

来自文档:

将Closure Compiler与findxargs结合使用时,可以方便地利用其他参数功能:

 find MY_JS_SRC_DIR -name '*.js' \\ | xargs java -jar compiler.jar --manage_closure_dependencies 

find命令将在MY_JS_SRC_DIR目录中生成'* .js'源文件列表,而xargs将它们转换为一组空格分隔的参数,这些参数附加到java命令以运行编译器。

请注意,在这种情况下使用--manage_closure_dependencies选项很重要,因为find生成的顺序不太可能针对goog.provide()goog.requires()正确排序。


(4) v20140625版本增加了对** (globstar)通配符的支持,该通配符以递归方式匹配所有子目录。

例如,这将包括/src/及其所有子目录中的所有.js文件:

java -jar compiler.jar \
    --js_output_file build/out.js './src/**.js'

更多信息在这里 来自文档:

您也可以使用minimatch风格的glob模式。 例如,使用:

 --js='**.js' --js='!**_test.js' 

以递归方式包含所有不以_test.js结尾的js文件

来自Java文档

以下规则用于解释glob模式:

  • *字符匹配名称组件的零个或多个字符,而不跨越目录边界。
  • **字符匹配跨越目录边界的零个或多个字符。

(5) v20140625版本还添加了一个新功能:如果输入路径是目录,则将包含该目录中的所有.js文件和所有子目录。

例如,这将包括/src/及其所有子目录中的所有.js文件:

java -jar compiler.jar \
    --js_output_file build/out.js './src/'

更多信息在这里

    <exec executable="java">
        <arg line="-jar ../lib/compiler.jar --compilation_level SIMPLE_OPTIMIZATIONS --language_in ECMASCRIPT5 --js_output_file=${compressdir}/js/controllers/jscontrollersfiles.js ${webappdir}/js/controllers/*.js" />
    </exec>

谷歌闭包文档的github给出了以下命令。

如果您有多个脚本,则应该使用一个编译命令将它们一起编译。

java -jar compiler.jar --js_output_file=out.js in1.js in2.js in3.js ...

您还可以使用minimatch风格的球。

# Recursively include all js files in subdirs
java -jar compiler.jar --js_output_file=out.js 'src/**.js'

# Recursively include all js files in subdirs, excluding test files.
# Use single-quotes, so that bash doesn't try to expand the '!'
java -jar compiler.jar --js_output_file=out.js 'src/**.js' '!**_test.js'

资料来源: https//github.com/google/closure-compiler#compiling-multiple-scripts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM