美文网首页
Elixir-自定义 Mix 任务

Elixir-自定义 Mix 任务

作者: 你期待的花开 | 来源:发表于2018-11-14 17:36 被阅读33次

简介

通过增加自定义 Mix 任务来扩展你的 Elixir 项目是很常见需求。在我们学习如何给我们的项目创建特定 Mix 任务之前,让我们看一个已经存在的任务。

$ mix phoenix.new my_phoenix_app

* creating my_phoenix_app/config/config.exs
* creating my_phoenix_app/config/dev.exs
* creating my_phoenix_app/config/prod.exs
* creating my_phoenix_app/config/prod.secret.exs
* creating my_phoenix_app/config/test.exs
* creating my_phoenix_app/lib/my_phoenix_app.ex
* creating my_phoenix_app/lib/my_phoenix_app/endpoint.ex
* creating my_phoenix_app/test/views/error_view_test.exs
...

正如上面我们看到的 shell 命令,Phoenix 有一个自定义的 Mix 任务去生成一个新项目。用 Elixir 创建类似的东西很容易。

起步

首先创建一个基本的 Mix 项目。

$ mix new hello

* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/hello.ex
* creating test
* creating test/test_helper.exs
* creating test/hello_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

cd hello
mix test

Run "mix help" for more commands.

在 Mix 为我们生成的 lib/hello.ex 文件中,创建一个会输出 “Hello, World!” 的函数。

defmodule Hello do
  @doc """
  每次调用都会输出 `Hello, World!`
  """
  def say do
    IO.puts("Hello, World!")
  end
end

自定义 Mix 任务

来创建我们的自定义 Mix 任务吧,新建一个目录以及文件 hello/lib/mix/tasks/hello.ex。

defmodule Mix.Tasks.Hello do
  use Mix.Task

  @shortdoc "Simply runs the Hello.say/0 command."
  def run(_) do
    # 调用我们刚才创建的 Hello.say 函数
    Hello.say()
  end
end

注意我们 defmodule 用Mix.Tasks 开头,后接我们想在命令里执行任务时用的名字。第二行用 use Mix.TaskMix.Task 这个 behaviour 引入当前命名空间。然后定义一个忽略所有参数的 run 函数。在这个函数里调用hello module 里的say 函数。

Mix 任务实战

来看看我们的 Mix 任务。首先保证在命令行中我们处在这个任务能起作用的目录,然后敲 mix hello,我们应该会看到下面的结果:

$ mix hello
Hello, World!

当你打错字, Mix 会用字符串模糊匹配来给你推荐:

$ mix hell
** (Mix) The task "hell" could not be found. Did you mean "hello"?

不知道你有没有注意到我们刚刚用了一个新的模块属性(module attribute)?就是 @shortdoc,这个属性在我们发布应用的时候非常有用,比如一个用户在命令行里敲 mix help 的时候。

$ mix help

mix app.start         # Starts all registered apps
...
mix hello             # Simply calls the Hello.say/0 function.
...

相关文章

  • Elixir-自定义 Mix 任务

    简介 通过增加自定义 Mix 任务来扩展你的 Elixir 项目是很常见需求。在我们学习如何给我们的项目创建特定 ...

  • 微距摄影——猪猪的世界

    拍摄 : 索尼a6000 出境 : 猪猪 后期 : mix加滤镜,黄油相机加文字 mix可以保存自定义滤镜,先调一...

  • Laravel Mix

    运行 Laravel Mix Laravel Mix 一款前端任务自动化管理工具,使用了工作流的模式对制定好的任务...

  • 修图类APP

    修图APP 滤镜类 推荐:VSCO MIX滤镜大师 VSCO:功能比较齐全,可以自定义参数,也可以找直接的滤...

  • Elixir-组合

    模块 模块是把函数组织到不同命名空间的最好的办法,除了能为函数分组,他还允许我们定义命名函数和私有函数。 Elix...

  • Elixir-函数

    目录 匿名函数& 操作符 模式匹配 命名函数函数名字和元数私有函数卫兵参数默认值 匿名函数 匿名函数就是没有名字,...

  • Elixir-推导

    在 Elixir 中,列表推导是循环遍历枚举值的语法糖。 基础 推导经常用来根据 Enum 和 Stream生...

  • Elixir-并发

    Elixir 的一大卖点就是对并发的支持,得益于 Erlang VM (BEAM) ,Elixir 的并发要比预期...

  • Elixir-基础

    安装 在https://elixir-lang.org 上可以找到安装说明。 使用 elixir -v 查看 el...

  • Elixir-集合

    列表、元组、关键字列表(keywords)、图(maps)、字典和函数组合子(combinators) 目录 列表...

网友评论

      本文标题:Elixir-自定义 Mix 任务

      本文链接:https://www.haomeiwen.com/subject/gwaemftx.html