Elixir 如何创建混合任务以生成文件
我如何创建一个定制的混合任务来动态生成代码和文件,就像Phoenix所做的那样。例如,Phoenix有一些生成器,比如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
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通常是我最后的选择。如果你想要一个例子,你可以看看它会做什么。谢谢你,正是我想要的。我在想你必须做一些复杂的元编程。没想到这么简单。这是一个很好的开始。