Mix: Um Guia para Iniciantes sobre a Ferramenta de Build e Gerenciamento de Dependências do Elixir

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: Explore a documentação oficial do Mix.

Mar 24, 2025 - 10:17
 0
Mix: Um Guia para Iniciantes sobre a Ferramenta de Build e Gerenciamento de Dependências do Elixir

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: