检查 Rakefile 中是否存在 rake 任务
Check if rake task exists from within Rakefile
我正在寻找一种方法来检查 Rakefile 中是否存在某个 rake 任务。我有一个任务依赖项,如果该任务可用,我只想将其作为依赖项包含在内。在这种特殊情况下,该任务仅在 Rails 项目中可用,但我希望我的 rake 任务也能在更通用的 Ruby 应用程序环境中工作(不仅仅是 Rails)。
我想做这样的事情:
if tasks.includes?('assets:precompile')
task :archive => [:clean, :vendor_deps, 'assets:precompile']
...
end
else
task :archive => [:clean, :vendor_deps]
...
end
end
在 rake 任务中有条件地包含任务依赖项的最佳方法是什么?
您应该可以使用 task_defined?
:
Rake::Task.task_defined?('assets:precompile')
做这样的事情怎么样?调用任务(如果存在),而不是使其成为显式依赖项?
task :archive => [:clean, :vendor_deps] do
Rake.application["assets:precompile"].invoke if Rake::Task.task_defined?('assets:precompile')
....
end
甚至更简单。由于再次指定任务允许您向其添加内容,因此类似这样的操作似乎也有效。
task :archive => [:clean, :vendor_deps] do
...
end
task :archive => "assets:precompile" if Rake::Task.task_defined?("assets:precompile")
如果已定义,它将有条件地添加对 assets:precompile 的依赖。
我正在寻找一种方法来检查 Rakefile 中是否存在某个 rake 任务。我有一个任务依赖项,如果该任务可用,我只想将其作为依赖项包含在内。在这种特殊情况下,该任务仅在 Rails 项目中可用,但我希望我的 rake 任务也能在更通用的 Ruby 应用程序环境中工作(不仅仅是 Rails)。
我想做这样的事情:
if tasks.includes?('assets:precompile')
task :archive => [:clean, :vendor_deps, 'assets:precompile']
...
end
else
task :archive => [:clean, :vendor_deps]
...
end
end
在 rake 任务中有条件地包含任务依赖项的最佳方法是什么?
您应该可以使用 task_defined?
:
Rake::Task.task_defined?('assets:precompile')
做这样的事情怎么样?调用任务(如果存在),而不是使其成为显式依赖项?
task :archive => [:clean, :vendor_deps] do
Rake.application["assets:precompile"].invoke if Rake::Task.task_defined?('assets:precompile')
....
end
甚至更简单。由于再次指定任务允许您向其添加内容,因此类似这样的操作似乎也有效。
task :archive => [:clean, :vendor_deps] do
...
end
task :archive => "assets:precompile" if Rake::Task.task_defined?("assets:precompile")
如果已定义,它将有条件地添加对 assets:precompile 的依赖。