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.Project
Mix项目的详细文档,请参阅模块。
一旦定义了项目,就可以直接从命令行运行许多默认的混合任务:
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.exs
Mix中添加或附加新的编译器:
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。