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

Elixir 如何创建混合任务以生成文件,elixir,Elixir,我如何创建一个定制的混合任务来动态生成代码和文件,就像Phoenix所做的那样。例如,Phoenix有一些生成器,比如mixphx.gen.html,可以在lib下动态添加一组文件。我并不想完成任何复杂的事情,只是想弄清楚如何动态生成代码。例如,我将如何创建一个混合任务,用此代码生成名为user.ex的文件 defmodule用户操作 def功能1(arg),do:arg def功能2(arg),do:arg 结束 foo=你的应用程序名称 foo/lib/foo/mix/tasks/creat

我如何创建一个定制的混合任务来动态生成代码和文件,就像Phoenix所做的那样。例如,Phoenix有一些生成器,比如
mixphx.gen.html
,可以在lib下动态添加一组文件。我并不想完成任何复杂的事情,只是想弄清楚如何动态生成代码。例如,我将如何创建一个混合任务,用此代码生成名为
user.ex
的文件

defmodule用户操作
def功能1(arg),do:arg
def功能2(arg),do:arg
结束

foo=你的应用程序名称

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

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
[“骨架”]
将作为参数传递给
run()
,任务将创建以下文件:

foo/lib/foo/skeleton.ex
内容包括:

defmodule Foo.Skeleton do
  def hello do
  end

  def goodbye do
  end
end

从阅读和开始,谷歌搜索混合任务时的前两个点击。专业提示:在
iex-S mix
shell中键入
h mix.Task
,或
h File.
,可以快速访问帮助主题,并查看您得到了什么。@zwippie我读了那篇文章,它非常基本。我知道如何创建一个简单的混合任务,将hello world打印到控制台。我在谷歌上搜索了很多,还没有找到任何关于如何创建混合任务来生成文件的信息。Stackoverflow通常是我最后的选择。如果你想要一个例子,你可以看看它会做什么。谢谢你,正是我想要的。我在想你必须做一些复杂的元编程。没想到这么简单。这是一个很好的开始。