14

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

对于一个文件,它是:

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

但是我没有在文档中找到如何将我的其他文件放在最后final.js而不覆盖最后一个压缩文件?

我想要这样的东西:

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

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

4

7 回答 7

14
java -jar path/to/closure-compiler/build/compiler.jar \ 
--js input_one.js \ 
--js input_two.js \ 
... \ 
--js_output_file compiled_output.js 
于 2010-10-28T13:38:27.057 回答
7

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

java -jar compiler.jar --js file1.js file2.js file3.js  --js_output_file --js_output_file compiled_output.js. 
于 2012-12-17T14:30:34.503 回答
6

假设您已经在 Mac 上安装了带有 Homebrew 的 Closure Compiler,您还可以连接所有文件,然后将它们通过管道传输到 Closure(这也应该可以正常工作java -jar,但我还没有验证过):

cat $(ls scripts/*.js) | closure-compiler --js_output_file main.js
于 2012-11-12T19:04:03.170 回答
3

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


(1)这是muka 技术的一种变体,去掉了--js不需要的标志:

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

从文档:

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

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


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

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

从文档:

find将 Closure Compiler 与and结合使用时,可以方便地利用附加参数功能xargs

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

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

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


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

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

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该目录下的所有文件和所有子目录都会被包括在内。

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

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

更多信息在这里

于 2014-10-22T15:37:48.213 回答
2

您可以使用 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

于 2014-01-09T12:15:05.160 回答
1

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

于 2015-06-16T06:14:39.913 回答
0

google 关闭文档的 github 给出了以下命令。

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

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

您还可以使用 minimatch 样式的 glob。

# 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

于 2016-09-28T11:23:58.950 回答