Mix
До того, как мы начнём углубляться в специфику Elixir, сначала нужно изучить Mix.
Если вы знакомы с Ruby, то этот инструмент очень похож на Bundler, RubyGems и Rake, вместе взятые.
Это ключевая часть любого проекта на Elixir. В этом уроке мы откроем для себя лишь некоторые его возможности.
Для получения полного списка возможностей Mix в текущей среде выполните команду mix help
.
До этого мы работали только с iex
, у которого есть ограничения
Для создания чего-то большего нужно разделить код на файлы и эффективно ими управлять, что Mix и позволяет делать с помощью проектов.
Создание проекта
Когда мы готовы создать новый Elixir-проект, Mix позволяет быстро это сделать с помощью команды mix new
.
Эта команда создаст структуру папок проекта и необходимые файлы.
Это просто, так что давайте начнём:
mix new example
Из вывода этой команды видно, что Mix создал папку и несколько файлов проекта:
* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/example.ex
* creating test
* creating test/test_helper.exs
* creating test/example_test.exs
В этом уроке мы сосредоточимся на mix.exs
.
Тут мы настраиваем приложение, зависимости, окружение и версию.
Открыв файл, можно увидеть что-то подобное (комментарии убраны для упрощения):
defmodule Example.MixProject 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
используется при генерации файла приложения, которую мы рассмотрим ниже.
Интерактивный режим
Возможно, понадобится использовать iex
из контекста приложения.
К счастью, Mix позволяет сделать это довольно просто.
Мы можем начать новую сессию iex
:
cd example
iex -S mix
Такой вариант запуска iex
загрузит приложение и все его зависимости в текущую сессию.
Компиляция
Mix — достаточно умный инструмент и будет перекомпилировать изменения только когда нужно, но иногда может понадобиться скомпилировать весь проект. В этом разделе мы рассмотрим, как скомпилировать проект и что делает компиляция.
Для компиляции проекта с помощью Mix, достаточно запустить команду mix compile
в папке проекта:
Примечание: задачи Mix для проекта доступны только из корневого каталога проекта, в противном случае доступны только глобальные задачи Mix.
mix compile
Сейчас проект почти пуст, потому вывод команды будет краток, но она закончится успешно:
Compiled lib/example.ex
Generated example app
Когда мы компилируем проект, Mix создаёт папку _build
с результатом сборки.
Если туда заглянуть сейчас, то там будет файл с скомпилированным проектом example.app
.
Управление зависимостями
Наш проект не имеет каких-либо зависимостей, но скоро они будут, поэтому мы продолжим и рассмотрим определение зависимостей и их получение.
Для подключения новой зависимости сначала стоит её добавить в 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
нужна только в окружениях разработки (dev) и тестирования (test).
Как только зависимости определены, их нужно получить.
Это аналог команды bundle install
:
mix deps.get
Вот и всё! Мы определили и получили зависимости проекта. Теперь должно быть понятно, как добавить зависимости в проект.
Окружения
Mix, как и Bundler, поддерживает различные окружения. После установки Mix настроен на три среды окружения:
-
:dev
— Окружение по умолчанию. -
:test
— Используется вmix test
. Будет рассмотрено подробнее в следующем уроке. -
:prod
— Используется при запуске приложения в рабочем окружении.
Текущий режим окружения можно получить с помощью функции Mix.env
.
При запуске любой команды его можно установить с помощью переменной окружения MIX_ENV
:
MIX_ENV=prod mix compile
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!