耙,如何创建具有多个输入和一个输出的任务?

时间:2015-11-20 20:49:13

标签: ruby rake

我们有一个rails应用程序,我们使用webpack,它需要多个javascript文件并输出一个单独的javascript文件。运行需要很长时间,我想为此创建一个rake任务。但是对于耙子来说,我需要一些帮助。

我想使用rake的构建系统,这样我就可以自动检查输入和输出.js文件之间的时间戳。因此,如果任何输入文件比输出文件更新,它将执行webpack。否则,如果输入文件的 none 比输出文件新,则该任务不执行任何操作。

在MSBuild中,这是一个很快的闪光灯。但在Ruby中,我有点迷失。

我猜它可能包括编写文件任务,循环并使一个输出文件依赖于输入。或者我应该使用这样的规则吗?

outputfile = "~/foo.js"
inputfiles = Dir["~/**/*.js"]

rule outputfile => inputfiles do
  bin/webpack bla bla bla
end

1 个答案:

答案 0 :(得分:1)

您可以使用Rake::FileList来实现此目的。像这样:

file "foo.js" => Rake::FileList["**/*.js"] do
  ...
end

而且,我不确定rake是否允许在路径中使用~,我相信需要完整的路径。或者只使用"#{Dir.home}/foo.js"规则。

然后使用:

调用它
rake ~/foo.js

当你有多个输出时:

task :build => Rake::FileList["config1.xml", "config2.xml"] do  
  # all that stuff is run only when the FileList above is changed
  touch 'foo1.js'
  touch 'foo2.js'
  sh "compile foo3.js"
  sh "do-anything-else foo4.js"
end

使用以下方式运行:

rake build