Pergunta

I'm just now learning about file tasks in Rake. I have 100s of javascript source files, that get concatenated to 10 or so files. I see this kind of mapping can be done intelligently with file tasks. It appears you need to specify every file.

Is there an efficient way to write a file task that recursively finds all of these javascript files and compare them to the concatenated files on the right side? The concatenation part is a tricky step and is being done by a custom build tool at the moment until I can get that in ruby.

For example,

/a.js
/c.js            -----------> base.js
/geo/b.js
/geo/c.js        -----------> geo.js
/mod/d.js
/mod/e.js        -----------> mod.js
Foi útil?

Solução

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

and so on, you will have to implement the concatenate method yourself, obviously (in my example the first argument is the list of files and the second is the destination file, e.g. geo.js). If all created files are named after directories you can do something like this:

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

If the directories can be globbed somehow you could make it even more dynamic by replacing the list of directory names with Dir[...] too.

Outras dicas

How to invoke this rake file task?

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

rake ????

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top