Прежде всего, я предполагаю, что ваши шаблоны экспортируются в глобальный объект (например, каждый из них делает window.userpane =
, а не просто userpane =
). Это самая важная вещь. Если вы делаете это, и вы успешно конкатенируете и компилируете, то единственное, что остается, - это автоматическое минификация после каждой конкатенации.
Краткий ответ: Пока еще нет хороших инструментов для этого. Ваш лучший вариант - расширить существующий Cakefile с помощью строки типа
fs.watchFile 'concatenated.js', ->
exec 'uglifyjs concatenated.js'
(Чтобы установить UglifyJS , запустите npm install uglify-js
.)
Теперь это не решит проблему обеспечения того, чтобы ваши сценарии были объединены в разумном порядке. (Например, если у вас есть window.templates = {}
в файле A и templates.userpane =
в файле B, то очень важно, чтобы файл A был объединен перед файлом B.) Для этого вы должны следить за Sprockets , который позволяет указать в верхней части каждого файла JS, каковы его зависимости, а затем объединить их в порядке, который учитывает эти зависимости. Создатель Sprockets, Сэм Стивенсон, является активным членом сообщества CoffeeScript, и первоклассная поддержка CoffeeScript в Sprockets появится в Sprockets 2 (репо здесь ).
Обновление: Вот задача Cake для фактического чтения и объединения всего в каталоге template
:
templateJs = ''
files = fs.readdirSync 'template'
for file in files
contents = fs.readFileSync file, 'utf8'
name = file.replace /\..*/, '' # remove extension
templateJs += "window.#{name} = '#{contents}';"
Затем добавьте в свой составной JS templateJs
. Обратите внимание, что это предполагает, что в шаблоне нет одинарных кавычек ('
). Либо ставьте обратную косую черту перед ними, либо последовательно используйте двойные кавычки.