如何创建混合任务以生成文件

时间:2019-07-09 23:30:06

标签: elixir

我将如何创建自定义混合任务以动态生成类似于Phoenix的代码和文件。例如Phoenix拥有mix phx.gen.html之类的生成器,它们将在lib下动态添加一堆文件。我并不想完成任何复杂的工作,而只是想弄清楚如何动态生成代码。例如,如何使用此代码创建一个混合任务来生成名为user.ex的文件。

defmodule User do

 def function1(arg), do: arg
 def function2(arg), do: arg

end

1 个答案:

答案 0 :(得分:2)

BasicDao

foo / lib / foo / mix / tasks / create_file.ex:

foo = your_app_name

如果您运行混合任务:

defmodule Mix.Tasks.CreateFile do
  use Mix.Task

  def run([file_name]) do
    app_dir = File.cwd!
    app_name = Path.basename(app_dir)
    new_file_path = Path.join(
        [app_dir, "lib", app_name, "#{file_name}.ex"]
    )

    File.write(
      new_file_path, 
      """
      defmodule #{String.capitalize(app_name)}.#{String.capitalize(file_name)} do
        def hello do
        end

        def goodbye do
        end
      end
      """, 
      [:write]
    )
  end

end

~/phoenix_apps/foo$ mix create_file skeleton 将作为arg传递给["skeleton"],该任务将创建文件:

run()

及其内容:

foo/lib/foo/skeleton.ex