【问题标题】:Compress all file .js with Google Closure Compiler Application in one File使用 Google Closure Compiler Application 将所有文件 .js 压缩到一个文件中
【发布时间】:2010-10-28 13:34:11
【问题描述】:

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

对于一个文件,它是:

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

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

【问题讨论】:

  • 顺便说一句,我写了一个脚本来做。我建议你也这样做。

标签: javascript compression google-closure-compiler


【解决方案1】:
java -jar path/to/closure-compiler/build/compiler.jar \ 
--js input_one.js \ 
--js input_two.js \ 
... \ 
--js_output_file compiled_output.js 

【讨论】:

  • 这是我在使用这样的 jar 时得到的!
【解决方案2】:

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

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

【讨论】:

  • 我用过这个java -jar lib/compiler.jar --js `find ./src/*.js` --js_output_file build/out.cjs
【解决方案3】:

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

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

【讨论】:

  • ls scripts/*.js 不会通过子文件夹递归
【解决方案4】:

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


(1) 这是muka's technique 的变体,去掉了不需要的--js 标志:

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

来自文档:

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

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


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

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和xargs:

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

find 命令将在 MY_JS_SRC_DIR 目录,而 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'

更多信息here。来自文档:

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

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

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

来自Java docs:

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

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

(5) v20140625 release 还增加了一个新特性:如果输入路径是目录,那么所有.js文件 在该目录中,所有子目录都将包括在内。

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

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

更多信息here。

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • 这里的compresseddir是一个包含压缩js文件的目录和
      • 和 webdir 指向我们项目中的 webapp
      【解决方案7】:

      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

      【讨论】:

      • 不要忘记简单的引号。我因此而失去时间。没有它们,它可以在 Windows 上运行;不在linux上。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      相关资源
      最近更新 更多