¿Porqué usar un template de proyectos?
- Para acelerar el inicio de un proyecto.
- Para crear un proyecto con los componentes que sean deseables sin tener que
invertir tiempo en customizar la construcción del paquete y las elecciones
hechas:
- Programa para construir el paquete
- Programa para correr los distintos tipos de tests
- Customización para integración continua y deployment continuo
¿Que programa usar?
Recordando la documentación de pyramid referente a la creación de proyectos, empiezo la búsqueda de opciones por cookiecutter.
La sección similar projects en el sitio web da una idea de alternativas. También el sitio alternativeto: alternativas a cookiecutter, alternativas a yeoman aunque la mayoría son para realizar desarrollos web, las descarto por estar interesado en proyectos genéricos. Por interes (o completitud parcial) busqué algún equivalente en perl sin encontrar algo significativo (en unos 20 minutos de busqueda bastante aleatoria).
Al final elegí entre las siguientes alternativas:
Comparación entre cookiecutter (CK) y yeoman (YM)
A continuación algunas comparaciones entre ellos luego de leer sus respectivas páginas de documentación (docs cookiecutter, docs yeoman (relativa a creación de generadores))
Lenguaje
- CK: python
- YM: javascript
Conceptos
-
CK: se crea un nuevo proyecto en base a un template. Una vez creado el proyecto no se pueden crear nuevos elementos (ver el issue #785 en github).
Los templates son creados utilizando jinja2 como template engine. Estos templates pueden estar almacenados en repositorios git, repositorios mercurial y archivos zip. Pueden poseer lógica en forma de hooks, pero es opcional.
-
YM: se utilizan generadores (scaffolding templates) para la creación de proyectos y elementos dentro de estos.
El generador es un paquete npm que debe codificarse y puede utilizar templates mediante ejs (ver sección Working With The File System en la documentación). También se permite actualizar archivos, quedando la elección del uso de parsers al usuario.
Pueden componerse generadores.
Impresiones:
- No es agradable el uso de expresiones de jinja2 en nombres de archivo que utiliza CK.
- Se nota que los conceptos manejados por YM son más potentes y genéricos.
- CK solo es útil para la creación de un proyecto.
Disponibilidad de templates/generadores
-
CK: No hay muchos templates disponibles, una lista de ellos se encuenta en el sitio web.
-
YM: Hay muchos generadores disponibles. Conviene buscarlos mediante la página Discovering generators en el sitio web.
Disponibilidad del programa en debian
- CK: disponible en debian stable y testing.
- YM: No está empaquetado para debian. Aunque la versión de nodejs en debian stable (repositorio stretch-backports) es la 8.11.1~dfsg-2~bpo9+1, debian no tiene paquete para npm y por ende se complica la instalación de yeoman. Para poder instalar yeoman hay que agregar repositorios externos; ver la página de instalación en el sitio web de node.
Impresión:
- CK tiene la ventaja de no tener que estar agregando repositorios y paquetes npm externos.
Ejemplos en documentación para creación de templates/generadores
-
CK: varios ejemplos en la documentación. Ya que lo único que hace CK al crear un proyecto es renderizar los templates hay abundantes ejemplos.
-
YM: falta un ejemplo o tutorial que indique como crear en generador desde cero. Las indicaciones que hay en la página web son muy genéricas, ya que se deja a criterio del implementador que herramientas utilizar.
YM cuenta con un generator-generator que puede utilizarse para crear generadores, pero no fué investigado.
Impresión:
- CK se ve más accesible para crear templates de proyectos de forma fácil y rápida.
Conclusiones
Ya que:
- carezco de experiencia en el uso de ambos,
- no deseo invertir tiempo en aprender a crear templates/generadores y
- deseo una rápida instalación del programa
voy a optar por comenzar a utilizar cookiecutter para la creación de futuros proyectos.
La opción de yeoman quedará para cuando requiera crear un template más complejo de lo que pueda manejar con CK o donde realmente requiera el uso de scaffolding para crear/modificar archivos tal que amerite aprender sobre yeoman.