문제

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
도움이 되었습니까?

해결책

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.

다른 팁

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 ????

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top