2013-03-07 2 views
3

Мне нужно использовать компилятор Google Closure.jar, чтобы минимизировать огромный проект, над которым я работаю. У меня есть несколько js-файлов, которые я хочу скомпилировать в один файл game.min.js. Я знаю, что я могу использовать следующее:Создание сценария для использования Google Closure для нескольких файлов javascript

java -jar compiler.jar --js file1.js --js file2.js --js etc, etc --js_output_file game.min.js 

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

Кто-нибудь там нашел/использовал/написал сценарий, который проходит через каталог и выплевывает все .js-файлы в один минитипированный файл? Я безнадежен с php, python и т. Д., Поэтому любая помощь очень ценится.

+0

Мы должны изменить бегун командной строки компилятора, чтобы можно было использовать обычные шаблоны оболочки, но если вы создаете скрипт, вы должны создать тот, который просто создает файл флага для компилятора со всеми указанными вами источниками. – John

ответ

2

use ant to automate the use of the closure compile r.

Я делаю это в два отдельных этапа, конкатенации затем компиляции:

<concat destfile="src/somepath/app.concat.js"> 
    <filelist dir="src/somepath"> 
     <file name="a.js" /> 
     <file name="b.js" /> 
     <file name="c.js" /> 
     <file name="d.js" /> 
    </filelist> 
</concat> 

<jscomp compilationLevel="simple" warning="quiet" debug="false" output="src/app.min.js"> 
    <sources dir="src/somepath"> 
     <file name="app.concat.js" /> 
    </sources> 
</jscomp> 

Будьте осторожны, что порядок файлов важен. Вот почему вы не можете просто передать набор файлов в задачу jscomp.

+0

Спасибо, что ответили. Простите мое невежество, но я полагаю, что я все равно должен добавить здесь каждый каталог и каждый файл в этом каталоге явно? Не допускается использование подстановочных знаков? –

+0

Я нашел старый командный файл, который мы использовали с JSmin, и изменил его, чтобы использовать Google Closure. Я дам вам лучший ответ, поскольку кажется, что муравей очень удобен для такого рода вещей! –

-1

Прежде чем применять компилятор Google Closure, вы должны объединить все исходные файлы.

Для всех связанных задач вы можете использовать инструмент сборки Ant. Кроме того, есть большой проект Grunt.js, который более удобен для JS. Есть grunt-contrib-concat и grunt-shell npm модули для Grunt.js, первый для конкатенации, другой для консольных команд.

Ваш Gruntfile.js может выглядеть следующим образом:

module.exports = function(grunt) { 
    // Project configuration. 
    grunt.initConfig({ 
     concat: { 
      js: { 
       src: ['src/js/*.js'], 
       dest: 'dist/pre-build.js' 
      } 
     }, 

     shell: { 
      optimize: { 
       command: 'google closure compiler command here', 
       stdout: true 
      } 
     } 
    }); 

    grunt.loadNpmTasks('grunt-shell'); 
    grunt.loadNpmTasks('grunt-contrib-concat'); 

    // Default task. 
    grunt.registerTask('default', ['concat', 'shell:optimize']); 
}; 
+1

Это затрудняет поиск любых ошибок или предупреждений. Если вы собираетесь найти и конкатенировать весь источник, вы можете создать правильную командную строку или файл флага. – John

+0

Это тот подход, к которому я пришел по аналогичным причинам, но проблема, с которой я столкнулся сейчас, заключается в том, что я больше не могу генерировать полезные исходные карты, потому что все они указывают на объединенный файл. Каковы эти файлы флагов - какие-либо ссылки, где я мог бы узнать об этом? Первоначально у меня было два сценария оболочки для этой сборки, но сохранение списка файлов для Mac и Windows стало утомительным, поэтому я опробовал кросс-платформенное решение Grunt - и теперь у меня нет полезных исходных карт! –

+0

Компилятор закрытия предназначен для приема нескольких исходных js-файлов и вывода одного скомпилированного файла - в этом смысле он делает для вас консенсус. – Elemental

1

Вы можете также использовать групповые символы при указании файлов. Вы можете изменить свой пример:

java -jar compiler.jar --js *.js --js_output_file game.min.js 

Это должно объединить все .js файлы в текущем рабочем каталоге в выходной файл, который вы указали.