Задача Rake file с сотнями файлов

Я только сейчас изучаю файловые задачи в Rake. У меня есть сотни исходных файлов javascript, которые объединяются в 10 или около того файлов. Я вижу, что такое сопоставление можно сделать разумно с файловыми задачами. Похоже, вам нужно указать каждый файл.

Есть ли эффективный способ написать файловую задачу, которая рекурсивно находит все эти файлы javascript и сравнивает их с конкатенированными файлами с правой стороны? Часть конкатенации — сложный шаг, и в данный момент она выполняется с помощью специального инструмента сборки, пока я не смогу получить это в ruby.

Например,

/a.js
/c.js            -----------> base.js
/geo/b.js
/geo/c.js        -----------> geo.js
/mod/d.js
/mod/e.js        -----------> mod.js

person Drew    schedule 08.12.2010    source источник


Ответы (2)


file 'base.js' => Dir['*.js'] do |t|
  concatenate t.prerequisites, t.name
end

file 'geo.js' => Dir['geo/*.js'] do |t|
  concatenate t.prerequisites, t.name
end

и так далее, вам, очевидно, придется реализовать метод concatenate самостоятельно (в моем примере первый аргумент — это список файлов, а второй — конечный файл, например, geo.js). Если все созданные файлы названы в честь каталогов, вы можете сделать что-то вроде этого:

%w(geo mod xyz abc).each do |module|
  file "#{module}.js" => Dir["#{module}/*.js"] do |t|
    concatenate t.prerequisites, t.name
  end
end

Если каталоги можно как-то объединить, вы можете сделать их еще более динамичными, заменив также список имен каталогов на Dir[...].

person Theo    schedule 08.12.2010
comment
Я начал понимать, что невозможно проверить файлы модулей a..n на исходные файлы a..z. Я надеялся, что смогу написать это, не указывая каждый целевой файл и каждый исходный файл... какое-то сопоставление. - person Drew; 08.12.2010

Как вызвать эту задачу rake file?

%w(geo mod xyz abc).each do |module|
  file "#{module}.js" => Dir["#{module}/*.js"] do |t|
    # some code
  end
end

грабли ????

person hpyhacking    schedule 09.12.2010
comment
Добавьте task :everything => "#{module}.js" под определением задачи file (непосредственно перед последним концом). Затем вы можете запустить все с rake everything. - person Theo; 09.12.2010