Сжать все файлы .js с приложением компилятора Google Closure в один файл - PullRequest
11 голосов
/ 28 октября 2010

Я хотел бы сжать все мои файлы .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

Это возможно, или я должен сделать программу, которая добавляет все файлы в файл и после его сжатия?Спасибо, если можете мне помочь!

Ответы [ 7 ]

13 голосов
/ 28 октября 2010
java -jar path/to/closure-compiler/build/compiler.jar \ 
--js input_one.js \ 
--js input_two.js \ 
... \ 
--js_output_file compiled_output.js 
7 голосов
/ 17 декабря 2012

Я попробовал ответ Орбиты, но он действительно не работал, возможно, версия, которую я использую, является более новой версией. Я использую команду:

java -jar compiler.jar --js file1.js file2.js file3.js  --js_output_file --js_output_file compiled_output.js. 
6 голосов
/ 12 ноября 2012

Предполагая, что вы установили компилятор Closure с Homebrew на Mac, вы также можете объединить все файлы и затем направить их к Closure (это также должно работать java -jar, но я этого не проверял):

cat $(ls scripts/*.js) | closure-compiler --js_output_file main.js
2 голосов
/ 22 октября 2014

Вот пять методов сглаживания для включения нескольких входных файлов, с документацией, извлеченной из класса CommandLineRunner:


(1) Это разновидность техники Мука , с удалением флага --js, который не нужен:

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

Из документов:

Имя флага --js является необязательным, поскольку по умолчанию аргументы интерпретируются как файлы.

Это будет включать все .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 и 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'

Подробнее здесь . Из документов:

Вы также можете использовать шаблоны шариков в стиле мини-матча. Например, используйте:

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

для рекурсивного включения всех js-файлов, которые не заканчиваются на _test.js

Из документов Java :

Следующие правила используются для интерпретации шаблонов глобуса:

  • Символ * соответствует нулю или более символов компонента имени без пересечения границ каталога.
  • Символы ** соответствуют нулю или более символов, пересекающих границы каталога.

(5) v20140625 В выпуске также добавлена ​​новая функция: если входной путь является каталогом, то все .js файлы в этом каталоге и все подкаталоги будут включены.

Например, это будет включать все .js файлы в /src/ и все его подкаталоги:

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

Подробнее здесь .

2 голосов
/ 09 января 2014

Вы можете использовать KjsCompiler: https://github.com/knyga/kjscompiler.Компилирует несколько файлов JavaScript с помощью приложения Google Closure Compiler в правильном порядке

Как решить вашу проблему: 1. Добавьте аннотации к файлам js, например:

/** * @depends {lib/somefile.js} **/ Если вам все равноо цепочке компиляции, вы можете игнорировать этот шаг.2. java -jar kjscompile.jar

Вы можете посмотреть, например, здесь: https://github.com/knyga/kjscompiler/tree/master/examples

1 голос
/ 16 июня 2015

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

0 голосов
/ 28 сентября 2016

Github из Google Closure Doc дает следующую команду.

Если у вас есть несколько сценариев, вы должны скомпилировать их все вместе с помощью одной команды компиляции.

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

Вы также можете использовать мини-шарики в стиле миниматчей.

# 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

...