Introdução

O Mix é a ferramenta de build padrão do Elixir, projetada para automatizar tarefas comuns como criação de projetos, compilação, testes e gerenciamento de dependências. Embora seja semelhante a ferramentas como a CLI do dotnet, o Mix oferece maior extensibilidade e está profundamente integrado ao ecossistema do Elixir.

Recursos Principais

Criando um Projeto

Gere um novo projeto Elixir com um único comando:

mix new friends

Isso cria um projeto estruturado com um arquivo mix.exs no seu núcleo.

O Arquivo mix.exs

Este arquivo define as configurações do projeto, dependências e tarefas. Aqui está um exemplo mínimo:

defmodule Friends.MixProject do  
  use Mix.Project  

  def project do  
    [  
      app: :friends,  
      version: "0.1.0",  
      elixir: "~> 1.18",  
      start_permanent: Mix.env() == :prod,  
      deps: deps()  
    ]  
  end  

  def application do  
    [extra_applications: [:logger]]  
  end  

  defp deps do  
    [] # Dependências vão aqui  
  end
end

Gerenciamento de Dependências

Adicionando Dependências

Edite a função deps no arquivo mix.exs:

defp deps do  
  [  
    {:ecto_sql, "~> 3.0"},  
    {:postgrex, ">= 0.0.0"}  
  ]  
end

⚠️ Nota: Ao contrário do npm ou cargo, o Mix não possui um comando como mix deps.add — edite o mix.exs manualmente.

Restaurando Dependências

mix deps.get      # Busca as dependências  
mix deps.compile  # Compila-as

Atualizando Dependências

Atualize um pacote específico:

mix deps.update ecto_sql

Atualize todos os pacotes:

mix deps.update --all

O Mix usa um arquivo mix.lock para garantir versões consistentes em diferentes ambientes.

Fluxos de Trabalho Comuns

Compilando o Projeto

mix compile

Executando Testes

mix test

Estendendo o Mix

Aliases (Atalhos)

Os aliases do Mix são atalhos personalizados definidos no arquivo mix.exs para simplificar ou combinar tarefas repetitivas. Eles permitem:

  • Encadear múltiplos comandos do Mix em um só.
  • Criar fluxos de trabalho específicos para o projeto.
  • Simplificar processos complexos de build/teste/deploy.
def project do  
  [  
    ...,  
    aliases: aliases()  
  ]  
end  

defp aliases do  
  [  
    build_test: ["compile", "test"],  
    "build:test": ["compile", "test"]  
  ]  
end

Execute com:

mix build_test

Tarefas Personalizadas

Crie tarefas reutilizáveis (ex: lib/mix/tasks/hello.ex):

defmodule Mix.Tasks.Hello do  
  @moduledoc "Exibe uma saudação: `mix help hello`"  
  use Mix.Task  

  @shortdoc "Imprime 'hello' no console"  
  def run(_args) do  
    IO.puts("hello")  
  end  
end

Execute com:

mix hello

Por que o Mix se Destaca?

  • Extensível: Frameworks como Phoenix e Ecto adicionam suas próprias tarefas (ex: mix ecto.gen.repo).
  • Completo: Tarefas embutidas para testes, compilação e gerenciamento de dependências.
  • Comunidade Ativa: A maioria das bibliotecas Elixir se integra perfeitamente ao Mix.

Conclusão

O Mix é a espinha dorsal do desenvolvimento em Elixir. Sua simplicidade para tarefas comuns e flexibilidade para customização o tornam indispensável.

Próximos Passos: