在更深入了解 Elixir 之前涩禀,我們必須先學(xué)習(xí) mix曹货。在編寫(xiě)大型項(xiàng)目的時(shí)候咆繁,為了方便管理,我們會(huì)把代碼分成不同的文件顶籽,mix 就是為了管理項(xiàng)目而生的玩般。
目錄
- 新項(xiàng)目
- 編譯
- 交互
- 管理依賴
- 多個(gè)環(huán)境
新項(xiàng)目
創(chuàng)建新項(xiàng)目,使用 mix new
礼饱,這個(gè)命令能自動(dòng)生成項(xiàng)目的目錄和一些標(biāo)準(zhǔn)的模板文件坏为。
? 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
這個(gè)文件,因?yàn)槲覀冇眠@個(gè)文件配置應(yīng)用镊绪、依賴匀伏、環(huán)境信息還有版本。
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
變量定義了應(yīng)用名稱帘撰,version
定義版本號(hào),elixir
定義了 Elixir的版本號(hào)万皿,deps
定義依賴摧找。下面還會(huì)講到核行,application
部分的內(nèi)容在生產(chǎn)應(yīng)用文件的時(shí)候會(huì)用到。
編譯
Mix 很智能蹬耘,能夠在需要的時(shí)候自動(dòng)編譯改動(dòng)的內(nèi)容芝雪,不過(guò)有時(shí)候還是要手動(dòng)編譯項(xiàng)目。
在項(xiàng)目的根目錄運(yùn)行 mix compile
就能編譯項(xiàng)目了综苔。
在我們編譯項(xiàng)目的時(shí)候惩系,mix 會(huì)自動(dòng)創(chuàng)建一個(gè)_build
目錄,查看_build
目錄如筛,你會(huì)看到編譯好的文件:example.app
堡牡。
交互
有時(shí)候需要用 iex
和我們的項(xiàng)目交互,mix 支持這個(gè)功能杨刨。編譯了項(xiàng)目之后晤柄,我們用命令打開(kāi)一個(gè)新的 iex
回話。
iex -S mix
這樣 iex
啟動(dòng)的時(shí)候就會(huì)把你的應(yīng)用和依賴都加在到當(dāng)前環(huán)境(這樣你可以在 iex
中導(dǎo)入和運(yùn)行編譯好的代碼)妖胀。
管理依賴
要增加新的依賴芥颈,首先把它添加到 mix.exs
文件的 deps
部分,所有的依賴組成了一個(gè)列表赚抡,每一項(xiàng)是一個(gè)二元元組爬坑,第一個(gè)值是原子表示的包名稱,第二個(gè)是包的版本號(hào)涂臣,版本號(hào)可以省略盾计。
舉一個(gè)有依賴的項(xiàng)目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
這個(gè)依賴只有在開(kāi)發(fā)和測(cè)試環(huán)境才需要肉康。
定義依賴闯估,還需要獲取依賴 mix deps.get
。
多個(gè)環(huán)境
默認(rèn)情況下吼和,mix 支持三種環(huán)境:
- dev — 默認(rèn)的環(huán)境
- test — mix test 使用的環(huán)境涨薪,后面會(huì)講到
- prod — 把應(yīng)用上線會(huì)用到的環(huán)境
可以從Mis.env
變量中獲取到當(dāng)前的環(huán)境,而且環(huán)境也可以通過(guò)MIX_ENV
環(huán)境變量來(lái)配置:
$ MIX_ENV=prod mix compile