在更深入了解 Elixir 之前,我们必须先学习 mix。在编写大型项目的时候,为了方便管理,我们会把代码分成不同的文件,mix 就是为了管理项目而生的。
目录
- 新项目
- 编译
- 交互
- 管理依赖
- 多个环境
新项目
创建新项目,使用 mix new
,这个命令能自动生成项目的目录和一些标准的模板文件。
➜ Desktop mix new example
* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/example.ex
* creating test
* creating test/test_helper.exs
* creating test/example_test.exs
Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:
cd example
mix test
Run "mix help" for more commands.
这篇文章介绍 mix.exs
这个文件,因为我们用这个文件配置应用、依赖、环境信息还有版本。
defmodule Example.Mixfile do
use Mix.Project
def project do
[
app: :example,
version: "0.1.0",
elixir: "~> 1.5",
start_permanent: Mix.env() == :prod,
deps: deps()
]
end
def application do
[
extra_applications: [:logger]
]
end
defp deps do
[]
end
end
在 project
部分,app
变量定义了应用名称,version
定义版本号,elixir
定义了 Elixir的版本号,deps
定义依赖。下面还会讲到,application
部分的内容在生产应用文件的时候会用到。
编译
Mix 很智能,能够在需要的时候自动编译改动的内容,不过有时候还是要手动编译项目。
在项目的根目录运行 mix compile
就能编译项目了。
在我们编译项目的时候,mix 会自动创建一个_build
目录,查看_build
目录,你会看到编译好的文件:example.app
。
交互
有时候需要用 iex
和我们的项目交互,mix 支持这个功能。编译了项目之后,我们用命令打开一个新的 iex
回话。
iex -S mix
这样 iex
启动的时候就会把你的应用和依赖都加在到当前环境(这样你可以在 iex
中导入和运行编译好的代码)。
管理依赖
要增加新的依赖,首先把它添加到 mix.exs
文件的 deps
部分,所有的依赖组成了一个列表,每一项是一个二元元组,第一个值是原子表示的包名称,第二个是包的版本号,版本号可以省略。
举一个有依赖的项目phoenix_slim 作为例子:
def deps do
[
{:phoenix, "~> 1.1 or ~> 1.2"},
{:phoenix_html, "~> 2.3"},
{:cowboy, "~> 1.0", only: [:dev, :test]},
{:slime, "~> 0.14"}
]
end
在这里,cowboy
这个依赖只有在开发和测试环境才需要。
定义依赖,还需要获取依赖 mix deps.get
。
多个环境
默认情况下,mix 支持三种环境:
- dev — 默认的环境
- test — mix test 使用的环境,后面会讲到
- prod — 把应用上线会用到的环境
可以从Mis.env
变量中获取到当前的环境,而且环境也可以通过MIX_ENV
环境变量来配置:
$ MIX_ENV=prod mix compile
网友评论