Mix
Antes de podermos mergulhar nas águas mais profundas de Elixir, primeiro precisamos aprender a utilizar o Mix.
Se você estiver familiarizado com Ruby, Mix é o Bundler, RubyGems e o Rake juntos.
É uma parte crucial de qualquer projeto Elixir e nesta lição vamos explorar apenas algumas das suas grandes funcionalidades.
Para ver tudo que o Mix tem para oferecer no ambiente atual, execute mix help
.
Até agora trabalhamos exclusivamente dentro do iex
que tem limitações
A fim de construir algo substancial precisamos dividir nosso código acima em outros arquivos para gerenciá-lo de forma eficaz; Mix nos permite fazer isso com projetos.
Novos Projetos
Quando estamos prontos para criar um novo projeto em Elixir, Mix faz com que isso seja fácil utilizando o comando mix new
.
Este comando irá gerar a estrutura de pastas do nosso projeto e a base de arquivos necessária.
Este é bastante simples, então vamos começar:
mix new example
A partir do resultado, podemos ver que o Mix criou nosso diretório e uma quantidade de arquivos necessários para o mesmo:
* 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
Nesta lição nós iremos focar nossa atenção no mix.exs
.
Aqui nós configuramos nossa aplicação, dependências, ambiente e versão.
Abra o arquivo no seu editor favorito, você deve ver algo como isto (comentários removidos por questões de consumo de espaço):
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
A primeira seção que iremos analisar é project
.
Aqui nós definimos o nome da nossa aplicação (app
), especificamos nossa versão (version
), versão do Elixir (elixir
), e finalmente nossas dependências (deps
).
A seção application
é usada durante a geração do nosso arquivo de aplicação que iremos ver em breve.
Interativo
Pode ser necessário a utilização do iex
dentro do contexto da nossa aplicação.
Felizmente para nós, Mix torna isso fácil.
Com a nossa aplicação compilada podemos começar uma nova seção iex
:
cd example
iex -S mix
Iniciando iex
desta forma, irá carregar sua aplicação e dependências no atual ambiente de execução.
Compilação
Mix é inteligente e irá compilar as alterações quando necessário, mas ainda pode ser necessário explicitamente compilar o seu projeto. Nesta seção, vamos cobrir a forma de compilar o nosso projeto e o que essa compilação faz.
Para compilar um projeto Mix, nós apenas temos que executar mix compile
em nossa base do diretório:
Nota: As tarefas do Mix de um projeto estão disponíveis apenas no diretório raiz do projeto, apenas as tarefas globais do Mix estão disponíveis em todos os projetos.
mix compile
Não há muito dentro do nosso projeto, então a saída não será muito emocionante, mas deve concluir com êxito:
Compiled lib/example.ex
Generated example app
Quando compilamos um projeto, Mix cria um diretório _build
para os nossos artefatos.
Se olharmos dentro de _build
veremos nossa aplicação compilada: example.app
.
Gerenciando Dependências
Nosso projeto não tem nenhuma dependência, mas terá em breve, por isso iremos seguir em frente e cobrir a definição e busca de dependências.
Para adicionar uma nova dependência, primeiro precisamos adicioná-la ao nosso mix.exs
na seção deps
.
Nossa lista de dependência é composta por tuplas com 2 valores obrigatórios e um opcional: O nome do pacote como um atom, a versão como string e opções opcionais.
Para este exemplo vamos ver um projeto com dependências, como 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
Como você provavelmente percebeu nas dependências acima, a dependência cowboy
é apenas necessária durante o desenvolvimento e teste.
Uma vez que tenhamos definido nossas dependências, existe um passo final: buscar estas dependências.
Isso é análogo ao bundle install
:
mix deps.get
É isso aí! Nós definimos e buscamos nossas dependências. Agora estamos preparados para adicionar dependências quando chegar a hora.
Ambientes
Mix, bem como Bundler, suporta ambientes diferentes. Naturalmente Mix trabalha com três ambientes:
-
:dev
— O ambiente padrão. -
:test
— Usado pormix test
. Coberto futuramente na nossa próxima lição. -
:prod
— Usado quando nós enviamos a nossa aplicação para produção.
O ambiente atual pode ser acessado usando Mix.env
.
Como esperado, o ambiente pode ser alterado através da variável de ambiente MIX_ENV
:
MIX_ENV=prod mix compile
Caught a mistake or want to contribute to the lesson? Edit this lesson on GitHub!