我将如何创建自定义混合任务以动态生成类似于Phoenix的代码和文件。例如Phoenix拥有mix phx.gen.html
之类的生成器,它们将在lib下动态添加一堆文件。我并不想完成任何复杂的工作,而只是想弄清楚如何动态生成代码。例如,如何使用此代码创建一个混合任务来生成名为user.ex
的文件。
defmodule User do
def function1(arg), do: arg
def function2(arg), do: arg
end
答案 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