Rake,如何创建具有多个输入和一个输出的任务?
Rake, how to create a task with multiple inputs and one output?
我们有一个 rails 应用程序,我们使用 webpack 获取多个 javascript 文件并输出一个 javascript 文件。 运行 需要很长时间,我想为此创建一个 rake 任务。但作为新手,我需要一些帮助。
我想使用 rake 的构建系统,这样我就可以自动检查输入和输出 .js 文件之间的时间戳。因此,如果 any 输入文件比输出文件更新,它将执行 webpack。否则,如果输入文件的 none 比输出文件更新,则任务不执行任何操作。
在 MSBuild 中,这是小菜一碟,速度快如闪电。但是在 Ruby 我有点迷路了。
我猜它可能包括编写文件任务,循环遍历并使一个输出文件取决于输入。或者我应该使用这样的规则?
outputfile = "~/foo.js"
inputfiles = Dir["~/**/*.js"]
rule outputfile => inputfiles do
bin/webpack bla bla bla
end
您可以使用 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
我们有一个 rails 应用程序,我们使用 webpack 获取多个 javascript 文件并输出一个 javascript 文件。 运行 需要很长时间,我想为此创建一个 rake 任务。但作为新手,我需要一些帮助。
我想使用 rake 的构建系统,这样我就可以自动检查输入和输出 .js 文件之间的时间戳。因此,如果 any 输入文件比输出文件更新,它将执行 webpack。否则,如果输入文件的 none 比输出文件更新,则任务不执行任何操作。
在 MSBuild 中,这是小菜一碟,速度快如闪电。但是在 Ruby 我有点迷路了。
我猜它可能包括编写文件任务,循环遍历并使一个输出文件取决于输入。或者我应该使用这样的规则?
outputfile = "~/foo.js"
inputfiles = Dir["~/**/*.js"]
rule outputfile => inputfiles do
bin/webpack bla bla bla
end
您可以使用 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