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!