Do you want to pick up from where you left of?
Take me there

Mix

Преди да можем да навлезнем повече в Elixir, трябва първо да научим повече за mix. Ако знаете Ruby, то mix е Bundler, RubyGems и Rake в едно. Той е важна част от всеки Elixir проект и в този урок, ще разгледаме няколко от неговите възможностти. За да видите всичко, което mix предлага, просто изпълнете mix help.

Досега работихме само в iex, който има свойте лимитации. За да създадем един истински проект, трябва да разделим кода си в много файлове, за да го управляваме лесно; mix ни улеснява да постигнем това с проекти

Нови проекти

Mix ни дава mix new команда за лесно създаване на проект. Това ще генерира структурата на директорията и всичко нужно. Нека пробваме:

mix new example

От output-a, можем да видим че mix създаде нашата директория и редица нужни файлове:

* creating README.md
* creating .gitignore
* creating .formatter.exs
* creating mix.exs
* creating lib
* creating lib/example.ex
* creating test
* creating test/test_helper.exs
* creating test/example_test.exs

В този урок, ще се фокусираме върху mix.exs. Там конфигурираме нашата апликация, dependencies, среди и версия. Отворе файла във вашия любим текстов редактор и би трябвало да видите нещо такова(коментарите са премахнати за да е по-кратко):

defmodule Example.Mix 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) и dependencies (deps).

Секцията application се използва по време на генериране на нашата аплиция, което ще разгледаме сега.

Интерактивност

Може да се наложи да ползваме iex в контекста на нашата апликация. За щастие това е лесно с mix. Можем да почнем нова iex сесия:

cd example
iex -S mix

Стартирането на iex така, ще зареди нашата аплицакия и всички dependencies.

Компилация

Mix е умен и ще компилира вашите промени, когато е нужно, но може все пак да се наложи да се компилира експлицитно. В тази част ще покрием как да компилираме нашия проект и какво прави това.

За да компилираме mix проект, просто трябва да изпълним mix compile:

mix compile

Понеже не сме добавяли неща в нашия проект(все още), output-a не е много вълнуващ, но трябва да компилира успешно:

Compiled lib/example.ex
Generated example app

Когато компилираме проект mix създава _build директория. Ако погледнем в _build ще видим нашата компилирана апликация: example.app.

Менажиране на dependencies

Нашите проекти нямат dependencies, за сега. Да продължим с дефинирането на dependencies и тяхното сваляне.

За да добавим добавим нов dependency, ни трябва първо да ги добавим в mix.exs в deps секцията. Нашия списък с dependencies се състои от tuples с две задължителни стойности и една по избор: името на пакета като атом, версията като низ, и допълнителни опции.

За този пример нека погледнем един проект с dependency, като 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

Както може би забелязахте, от dependencies по-горе, cowboy е нужен само по време на разработка и тестваме.

Веднъж щом дефинираме нашите dependencies има една финална стъпка: да ги свалим. Това е аналогично на bundle install:

mix deps.get

Това беше! Дефинирахме и свалихме нашите dependencies. Сега сме подготвени да добавим dependencies, когато дойде времето.

Среди

Mix, както и Bundler, поддържа различни среди. Mix подразбиране работи с три среди:

Текущата среда може да се достъпи с Mix.env. Както се очаква, средата може да се смени с MIX_ENV:

MIX_ENV=prod mix compile
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!