Je souhaite utiliser la tâche Rake suivante pour plusieurs répertoires. Et chaque répertoire aurait besoin de constantes légèrement différentes définies. Comment puis-je gérer cela et rester sec?Tâche Rake flexible
namespace :assets do
EXT = 'js'
OBJDIR = 'public/javascripts'
LIBFILE = "#{OBJDIR}/packaged.#{EXT}"
SRC = FileList["#{OBJDIR}/*.#{EXT}"].select {|file| !file.match(/\.min\.#{EXT}|packaged\.#{EXT}/)}
OBJ = SRC.collect {|fn| File.join(OBJDIR, File.basename(fn).ext("min.#{EXT}"))}
MINE = %w(4sq app fb mbp).collect {|x| x + ".#{EXT}"}
desc "Build #{LIBFILE}"
task :build => LIBFILE
desc "Remove minified files"
task :clean do
rm_f OBJ
end
desc "Remove #{LIBFILE}"
task :clobber do
rm_f LIBFILE
end
file LIBFILE => OBJ do
sh "cat #{OBJ} >> #{LIBFILE}"
end
rule ".min.#{EXT}" => lambda{ |objfile| find_source(objfile) } do |t|
if EXT == 'js'
if MINE.include?(File.basename(t.source))
sh "closure --js #{t.source} --js_output_file #{t.name}"
else
sh "closure --warning_level QUIET --third_party --js #{t.source} --js_output_file #{t.name}"
end
elsif EXT == 'css'
sh "yuicompressor #{t.source} -o #{t.name}"
end
end
def find_source(objfile)
base = File.basename(objfile, ".min.#{EXT}")
SRC.find {|s| File.basename(s, ".#{EXT}") == base}
end
end
Merci pour l'aide, je grok ce que vous obtenez. J'ai essayé, mais ça ne semble pas fonctionner. La tâche 'file' ne semble pas correctement définie de cette façon, et la tâche' build' n'obtient pas la dépendance définie. –
Je reçois cette erreur: 'Dépendance circulaire détectée: TOP => assets: build => =>' –
Il semble que les variables ne sont disponibles que dans la définition d'une tâche. –