Mix es una herramienta fundamental que viene incluida con Elixir y que nos acompaña en el desarrollo de proyectos reales. A diferencia de ejecutar archivos sueltos en el entorno interactivo iex, Mix nos permite trabajar con proyectos completos, que pueden contener varios módulos, y gestionar todo de forma organizada y eficiente. Esto es especialmente útil cuando queremos compilar, empaquetar y distribuir nuestras aplicaciones, ya sea para ejecutarlas en una máquina virtual BEAM, dentro de un contenedor Docker o en cualquier otro entorno.
Una de las grandes ventajas de Mix es su capacidad para manejar dependencias externas. Por ejemplo, si necesitamos trabajar con JSON, en lugar de implementar nuestro propio parser, podemos aprovechar librerías ya existentes que están disponibles en el repositorio oficial de paquetes de Elixir, ex.pm. Mix nos facilita la instalación y gestión de estas dependencias dentro de nuestro proyecto, evitando tener que hacerlo manualmente y asegurando que todo funcione correctamente.
Además de gestionar dependencias, Mix nos ayuda a ejecutar tareas comunes como formatear código, lanzar tests y compilar nuestro proyecto. Estas funcionalidades son esenciales para mantener un flujo de trabajo profesional y ordenado. Incluso para aspectos más avanzados, como la gestión de árboles de supervisión en Elixir, Mix es la herramienta adecuada para controlar y automatizar estos procesos.
Para empezar a usar Mix, lo primero es asegurarnos de que está instalado y accesible desde la línea de comandos. Al escribir mix en la terminal, veremos una lista de subcomandos disponibles, como mix new, mix help o mix local. En proyectos más complejos, como los creados con Phoenix, Mix puede extenderse con comandos adicionales específicos para ese entorno.
El comando que más nos interesa al principio es mix new, que nos permite crear un nuevo proyecto. Por ejemplo, si ejecutamos:
mix new hola
se creará un directorio llamado hola con una estructura básica que incluye carpetas como lib y test, además de archivos importantes como mix.exs y README.md.
El archivo mix.exs es el corazón de nuestro proyecto. Es un script de Elixir que contiene una función llamada project, la cual devuelve una lista de palabras clave con información esencial como el nombre de la aplicación, la versión, la versión mínima de Elixir requerida y las dependencias. Este archivo es donde configuramos los detalles que definen nuestro proyecto y sus necesidades.
Dentro de la carpeta lib encontraremos un archivo llamado hola.ex, que contiene un módulo de ejemplo con una función simple:
defmodule Hola do
def hello do
:world
end
end
Este módulo es un punto de partida que podemos modificar para añadir la funcionalidad que deseemos. En proyectos reales, aquí es donde colocaremos todos los módulos y archivos .ex que conforman nuestro código.
La carpeta test está destinada a alojar nuestros tests. Aunque no es obligatorio escribir tests en Elixir, es una práctica muy recomendable. Los tests son programas que verifican que nuestro código funciona correctamente, comprobando que las funciones devuelven los resultados esperados. Por ejemplo, podríamos escribir un test que asegure que la función que suma dos números devuelve el resultado correcto. Si alguna prueba falla, nos alertará de que hay un problema en nuestro código.
Para trabajar con nuestro proyecto en modo interactivo, no basta con ejecutar iex directamente, ya que no cargará nuestro proyecto ni sus dependencias. En su lugar, debemos usar:
iex -S mix
Este comando inicia una sesión interactiva de Elixir que primero compila y carga nuestro proyecto gestionado por Mix. Así, podremos llamar a funciones definidas en nuestros módulos, como Hola.hello(), y obtener los resultados esperados.
Al ejecutar iex -S mix, también veremos que se crea un directorio llamado _build, donde Mix guarda los archivos compilados y otros datos internos necesarios para el correcto funcionamiento y despliegue de nuestra aplicación.
En resumen, Mix es la herramienta que nos permite dar el salto de escribir código suelto a desarrollar proyectos completos en Elixir, facilitando la gestión de dependencias, la compilación, la ejecución de tests y la interacción con nuestro código de forma organizada y profesional. A partir de aquí, todo nuestro trabajo con Elixir girará en torno a Mix y sus funcionalidades.