像Elixir Mix任务中的依赖功能一样耙?

elp*_*dev 2 rake elixir-mix elixir

在Rake中,可以指定任务之间的依赖关系.然后,引擎构建依赖关系树,并按依赖关系的顺序执行这些任务,并且每个任务只执行一次.

在elixir/mix中是否有类似的机制?

task seed_users: [:seed_companies] do 
  # actions
end

task :seed_companies do
  # actions
end
Run Code Online (Sandbox Code Playgroud)

Dog*_*ert 5

我不认为有任何内置功能,但您可以Mix.Task.run/2用来实现这一目标:

defmodule Mix.Tasks.SeedUsers do
  def run(_args) do
    IO.puts "started seed_users"
    Mix.Task.run "seed_companies"
    Mix.Task.run "seed_companies"
    IO.puts "completed seed_users"
  end
end

defmodule Mix.Tasks.SeedCompanies do
  def run(_args) do
    IO.puts "started seed_companies"
    IO.puts "completed seed_companies"
  end
end
Run Code Online (Sandbox Code Playgroud)

示例运行:

$ mix seed_users
started seed_users
started seed_companies
completed seed_companies
completed seed_users
Run Code Online (Sandbox Code Playgroud)

请注意,Mix.Task.run/2如果任务已经运行一次,则不运行任务,因此如果您调用Mix.Task.run/2两次,如上例所示,它只运行一次.如果您想多次运行任务,则需要Mix.Task.reenable/1在每次运行后调用.