Сжатие всего файла .js с помощью приложения Google Closure Compiler в одном файле

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

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Вы можете использовать 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

Ответ 5

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


(1) Это вариант техники муки, удалив флаг --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

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

Удобно использовать дополнительную функцию аргументов при использовании Closure Compiler в сочетании с 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 docs:

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

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

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

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

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

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

Ответ 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>

Ответ 7

В github документа google закрытия dow приведена команда ниже.

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

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