任务依赖性是否总是以rake的特定顺序运行?

Chr*_*ris 10 ruby rake

我有以下示例,它基于我希望我的rakefile使用的结构:

task :default do
    puts 'Tasks you can run: dev, stage, prod'
end

task :dev => [:init,:devrun,:clean]
task :devrun do
    puts 'Dev stuff'
end

task :stage => [:init,:stagerun,:clean]
task :stagerun do
    puts 'Staging stuff'
end

task :prod => [:init,:prodrun,:clean]
task :prodrun do
    puts 'Production stuff'
end

task :init do
    puts 'Init...'
end

task :clean do
    puts 'Cleanup'
end
Run Code Online (Sandbox Code Playgroud)

任务总是以相同的顺序运行吗?我读到某个地方,他们不会,以及他们会在其他地方,所以我不确定.

或者,如果您可以建议一种更好的方法来实现我想要实现的目标(例如,围绕依赖环境的步骤进行共同的初始化和清理步骤),这也是好的.

谢谢

Mic*_*ile 16

来自Rake源代码:

# Invoke all the prerequisites of a task.
def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
  @prerequisites.each { |n|
    prereq = application[n, @scope]
    prereq_args = task_args.new_scope(prereq.arg_names)
    prereq.invoke_with_call_chain(prereq_args, invocation_chain)
  }
end
Run Code Online (Sandbox Code Playgroud)

因此,代码通常只是迭代数组并按顺序运行先决条件任务.

然而:

# Declare a task that performs its prerequisites in parallel. Multitasks does
# *not* guarantee that its prerequisites will execute in any given order
# (which is obvious when you think about it)
#
# Example:
#   multitask :deploy => [:deploy_gem, :deploy_rdoc]
#
def multitask(args, &block)
  Rake::MultiTask.define_task(args, &block)
end
Run Code Online (Sandbox Code Playgroud)

所以你是对的,两者都可以是真的,但是如果你给你的任务加上前缀,那么订单只能关闭multitask 它看起来像是按顺序运行常规任务.