2

次のようなエイリアスを設定する場合:

defp aliases do
    [
      test_run: ["run -e 'IO.puts(\"One\")'", "run -e 'IO.puts(\"Two\")'"]
    ]
end

の結果mix test_run

$ mix test_run
One
Two

ただし、最初のタスクのみを実行して印刷します

$ mix test_run
One

意図した動作かどうかはわかりませんが、問題を提起する前に確認したかったのです。エラーを再現するためのリポジトリは次のとおりです: https://github.com/wende/mix_run_twice

4

1 に答える 1

3

Mix では、タスクを 2 回実行することはできません。ただし、Mix.Task.reenable/1を使用して再度実行することはできます。

  test_run: ["run -e 'IO.puts(\"One\"); Mix.Task.reenable(:run)'", "run -e 'IO.puts(\"Two\")'"]

最初のタスクの最後にタスクを再度有効にする必要がありますrun。そうしないと、2 番目のタスクに到達しません。次のようなことはできません。

 ["run -e 'IO.puts(\"One\")'", "run -e 'Mix.Task.reenable(:run)'"]

実行するタスクごとにMix.Task.run/2を呼び出すカスタム ミックス タスクを作成し、必要に応じて再度有効にすることをお勧めします。Elixir 1.3 では、タスクに対してandを実行するrerun/2関数を提供することで、これが簡単になります。https://github.com/elixir-lang/elixir/pull/4394reenablerun

于 2016-04-26T07:31:21.340 に答える