非常教程

Elixir 1.5参考手册

Mix

Mix

Mix是一个构建工具,它提供创建、编译和测试Elixir项目、管理其依赖关系等任务。

Mix.Project

Mix的基础是一个项目。项目可以通过Mix.Project在模块中使用来定义,通常放置在名为mix.exs

defmodule MyApp.Mixfile do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "1.0.0"
    ]
  end
end

有关Mix.ProjectMix项目的详细文档,请参阅模块。

一旦定义了项目,就可以直接从命令行运行许多默认的混合任务:

  • mix compile-编译当前项目
  • mix test-运行给定项目的测试
  • mix run-在项目中运行特定命令

每个任务都有自己的选项,有时还需要在project/0功能。你可以用mix help列出所有可用的任务和mix help NAME为特定任务显示帮助。

启动第一个项目的最佳方法是调用mix new my_project从命令行。

Mix.Task

任务使混合可扩展。

项目可以通过添加自己的任务来扩展Mix行为。例如,在您的项目中添加以下任务将使其可供所有使用您项目的人员使用:

defmodule Mix.Tasks.Hello do
  use Mix.Task

  def run(_) do
    Mix.shell.info "hello"
  end
end

该任务现在可以通过调用mix hello

依赖

Mix还管理您的依赖关系,并与Hex包管理器很好地集成。

为了使用依赖关系,您需要为:deps项目配置添加一个键。我们经常将依赖关系列表提取到它自己的函数中:

defmodule MyApp.Mixfile do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "1.0.0",
      deps: deps()
    ]
  end

  defp deps do
    [
      {:ecto, "~> 2.0"},
      {:plug, github: "elixir-lang/plug"}
    ]
  end
end

您可以运行mix help deps以详细了解Mix中的依赖关系。

环境

Mix支持不同的环境。环境允许开发人员为不同的场景专门准备和组织他们的项目。默认情况下,Mix提供三种环境:

  • :dev-默认环境
  • :test-环境mix test跑上
  • :prod-依赖项运行的环境

环境可以通过命令行通过设置MIX_ENV例如,环境变量:

$ MIX_ENV=prod mix run server.exs

别名

别名是特定于当前项目的快捷方式或任务。

Mix.Task节中,我们定义了一个每个人都可以使用我们的项目作为依赖项使用的任务。如果我们希望任务只适用于我们的项目呢?只需定义一个别名:

defmodule MyApp.Mixfile do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "1.0.0",
      aliases: aliases()
    ]
  end

  defp aliases do
    [
      c: "compile",
      hello: &hello/1
    ]
  end

  defp hello(_) do
    Mix.shell.info "Hello world"
  end
end

在上面的例子中,我们定义了两个别名。一是mix c的捷径mix compile.另一个名为mix hello,它与Mix.Tasks.Hello我们在Mix.Task部分。

别名也可以是列表,指定要连续运行的多个任务:

[all: [&hello/1, "deps.get --only #{Mix.env}", "compile"]]

在上面的例子中,我们定义了一个名为mix all,然后获取特定于当前环境的依赖项并编译它。

提供给别名的参数将被附加到列表中最后一个任务的参数中,如果最后一个任务是一个函数,它们将作为一个字符串列表提供给该函数。

最后,别名也可以用来增加现有的任务。让我们假设你想增加mix clean若要清除另一个目录组合,请执行以下操作:

[clean: ["clean", &clean_extra/1]]

&clean_extra/1你将在哪里mix.exs使用额外的清理逻辑。

注别名不会出现在mix help当前项目中定义的别名不影响其依赖项,并且在依赖项中定义的别名无法从当前项目访问。

环境变量

几个环境变量可以用来修改混合的行为。

MIX响应以下变量:

  • MIX_ARCHIVES-指定应安装档案的目录
  • MIX_DEBUG-在运行每个任务之前输出有关它的调试信息
  • MIX_ENV-指定应使用哪个环境。见环境
  • MIX_EXS-更改到mix.exs档案
  • MIX_HOME-MIX主目录的路径,存储MIX使用的配置文件和脚本
  • MIX_PATH-附加额外的代码路径
  • MIX_QUIET-不向终端打印信息信息
  • MIX_REBAR-重写一个混合安装的rebar命令的路径
  • MIX_REBAR3-重写一个混合安装的3命令的路径

不应该保留一个值的环境变量(并且基本上作为标志行事)应该被设置为1或者true,例如:

$ MIX_DEBUG=1 mix compile

功能

compilers()

返回Mix使用的默认编译器。

debug(debug)

设置混合调试模式

debug?()

如果Mix处于调试模式,则返回true

env()

返回Mix环境

env(env)

将当前的Mix环境更改为 env

raise(message)

引发格式良好的Mix错误

shell()

Returns the current shell

设置当前外壳程序。

设置当前的shell

函数

compilers()

它可以用于mix.exs添加或追加新的编译器以混合:

它可以用于在mix.exsMix中添加或附加新的编译器:

def project do
  [compilers: Mix.compilers ++ [:foo, :bar]]
end

debug(debug)

设置混合调试模式。

debug?()

如果Mix处于调试模式,则返回true。

env()

返回Mix环境。

这个函数不应该在运行时在应用程序代码中使用(与基础结构和构建代码如Mix任务相反)。Mix是一个构建工具,在代码编译后可能无法使用(例如,在发行版中)。

为了根据环境区分程序行为,建议使用应用程序环境Application.get_env/3。正确的配置可以在Mix.Config文件中进行设置,通常是Mix.Config.import_config/1针对每个环境进行的(详情请参阅参考资料)。

env(env)

将当前的Mix环境更改为env

调用此函数时请小心,因为任何项目配置都不会重新加载。

这个函数不应该在运行时在应用程序代码中使用(请参阅env/0以获取更多信息)。

raise(message)

raise(binary):: no_return

引发格式良好的Mix错误。

shell()

返回当前shell。

shell/0可以用作当前shell的包装器。它包含从用户请求信息,打印到shell等的便利。Mix shell是可交换的(请参阅参考资料shell/1),允许开发人员使用测试外壳,它只是将消息发送到当前进程而不是执行IO(请参阅参考资料Mix.Shell.Process)。

默认情况下,这返回Mix.Shell.IO

shell(shell)

设置当前的shell。

Mix
Mix 详细
Mix.Config 详细
Mix.Project 详细
Mix.Shell.IO 详细
Mix.Shell.Process 详细
Mix.Task 详细