Ответ 1
java -jar path/to/closure-compiler/build/compiler.jar \
--js input_one.js \
--js input_two.js \
... \
--js_output_file compiled_output.js
Я хотел бы сжать весь мой файл .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
Это возможно или я должен делать программу, которая добавляет весь файл в файл и после сжатия его? Спасибо, если вы можете мне помочь!
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.
Предполагая, что вы установили компилятор Closure с Homebrew на Mac, вы также можете объединить все файлы, а затем подключить их к Closure (это также должно работать с java -jar
, но я его не проверял):
cat $(ls scripts/*.js) | closure-compiler --js_output_file main.js
Вы можете использовать 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
Вот пять методов глобирования для включения нескольких входных файлов, с документацией, извлеченной из 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/'
Подробнее здесь.
<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 документа 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