Tanto si NO conoces Maven como Yeoman es que no estás al día en lo que se refiere a desarrollo en Java y Javascript.
Maven está mucho más consolidado y probablemente ya te suene o lo estés usando, así mejor, porque hay un conjunto de herramientas muy similares para gestionar proyectos web y que deberías echarles un ojo para tu siguiente proyecto web.
¿En qué se parecen Yeoman y Maven?
La primera similitud es que tanto Maven como Yeoman sirven para lo mismo, para mejorar el workflow de desarrollo de aplicaciones.
¿Y qué es el worfklow de desarrollo de aplicaciones?
Pues el conjunto de acciones bien definidas en todo el proceso de desarrollo, por ejemplo:
- Crear un nuevo proyecto vacío
- Añadir una nueva dependencia
- Generar documentación
- Compilar, depurar y publicar
- Generar y versionar binarios
¿Por qué nos interesa un buen workflow de desarrollo?
Básicamente para que tú seas más productivo automatizando tareas repetitivas.
Si bien Maven es una especie de framework en sí, donde se define un formato para configurarse (el famoso POM), un sistema de extensión basado en plugins, con un conjunto de objetivos, comandos, etc.
Yeoman es un conjunto de herramientas que co-existen y una definición del propio workflow. La ventaja de Yeoman, es que esas herramientas tienen entidad propia y las puedes utilizar en tu proyecto sin seguir estrictamente el ‘workflow de Yeoman’
El workflow de Yeoman y en qué se parece a Maven
1. Crear un nuevo proyecto
La primera herramienta de Yeoman que usamos es ‘yo’. ‘yo’ es un generador de aplicaciones ‘vacías’ basadas en plantillas. Estas aplicaciones vacías son la estructura del proyecto, con su carpeta para meter el código Javascript, su carpeta para el estilo, imágenes, y los archivos necesarios para minimizar, depurar, etc.
Si conoces Maven, es exactamente lo mismo que los archetypes. Cuando invocas un archetype, Maven genera una aplicación vacía, con una estructura de directorios y un archivo pom pre-configurado.
En ambos casos puedes crear tus propios archetypes o generadores. Para saber más sobre crear generadores para Yeoman, lee esto, aunque a no ser que tengas una estructura de carpetas ya definida para tus proyectos, te servirá cualquiera de los cientos de generadores para Yeoman que ya existen.
2. Gestión de dependencias
Yeoman utiliza la herramienta bower, que no es más que un gestor de dependencias de librerías Javascript (creado por Twitter).
La correspondencia en Maven es la etiqueta
En bower, tenemos un archivo bower.json, donde se especifican esas dependencias y sus versiones, aunque lo normal es gestionarlo a través de la consola, con el comando bower y una serie de objetivos:
# Instalar todas las dependencias del bower.json
bower install
# Instalar una librería en local
bower install
bower install
# Buscar una ilbrería
bower search [
# Registrar una librería en el repositorio de bower
bower register
# Desinstalar una librería
bower uninstall
bower init
# Y te genera el bower.json
Si bien Maven parece algo más potente ya que permite configurar diferentes repositorios de artefactos y por lo que he visto hasta ahora, bower únicamente enlaza con su repositorio de librerías. Aunque si hay alguna que no existe, la puedes añadir tú mismo.
La principal ventaja de utilizar un gestor de dependencias, a parte de que es más sencillo descargarlas y actualizar versiones, es que no tienes que mantenerlas en tu repositorio de código. Es decir, únicamente con subir el archivo bower.json, el conjunto de dependencias deberían ser descargadas en el workspace de cada desarrollador.
¿Te suena el directorio .m2 de Maven? Pues bower, tiene un bower_components que es básicamente lo mismo.
3. Soporte al ciclo de vida
Bien, estas dos similitudes son muy claras. Pero en Maven hay cientos de plugins que permiten hacer casi cualquier cosa con un proyecto, compilar, generar documentación, depurar en Tomcat, mover recursos, ejecutar test, y un larguísimo etc.
Yeoman incorpora a su workflow Grunt que precisamente aporta esa potencia de poder ejecutar ‘plugins’ específicos o concatenar varios de ellos. Esto entre otras cosas nos va a permitir automatizar conjuntos de tareas en un motor de integración contínua. Grunt se parece más a Ant que a otra cosa, si no conoces Maven pero sí Ant, Grunt es lo mismo pero para proyectos web.
Al generar un proyecto vacío con yo, este ya incluye un script con algunas tareas de Grunt que permiten gestionar todo el ciclo de vida del proyecto: depurar (con livereload), ejecutar tests, minimizar javascript y css, fingerprinting de archivos, etc. Sólo tienes que ver el archivo Gruntfile.js
Empieza a usar Yeoman en 10 minutos
Por último, no he comentado nada de cómo se instala Yeoman, ni de cómo se usa, porque para eso basta con entrar a su web. Si no lo has utilizado nunca, entra y pruébalo, porque no creo que te cueste más de 10 minutos tener tu primera aplicación y empezar a desarrollar con ella.
Yeoman tiene algunos pre-requisitos (básicamente Node y Git), la guía completa para empezar con Yeoman la tienes aquí.
¿Y si ya tengo un proyecto web creado que no se ajusta a ninguna plantilla de ‘yo’? Pues puedes instalar bower y Grunt y configurarlos para tu proyecto :). Ya me cuentas.