Desarrollo de aplicaciones web con Drupal

Como crear un nuevo proyecto de Drupal 8 con composer

Composer logo

Existen diferentes formas de crear un proyecto nuevo con Drupal 8, por ejemplo como se ha venido haciendo desde hace años con Drupal 7: drush dl drupal. Sin embargo, si lo que queremos es una instalación de Drupal preparada para desarrollar una aplicación web completa, usando además GIT como control de versiones de nuestro código (sin incluir el código de terceros), es mucho más flexible y potente utilizar composer.

Podemos instalar composer manualmente en nuestra máquina si tenemos instalado PHP, que es lo habitual, pero yo últimamente prefiero utilizar Docker para tener todas las herramienta que necesito cada una en un contenedor independiente. De esta forma no tengo que configurar todo mi entorno de desarrollo cada vez que cambio de sistema operativo, ni dependo de las versiones que se distribuyen en los repositorios oficiales.

Intentaré escribir otro artículo explicando como configurar tu entorno de desarrollo utilizando contenedores Docker, sin instalar nada en el sistema operativo principal. De momento voy al grano y voy a crear un alias para que si no usas Docker también puedas seguir el tutorial. Yo suelo utilizar Docker Compose para abreviar todos los comandos que ejecuto dentro de un contenedor.

$ mkdir -p ~/.cache/composer
$ alias composer='docker run --rm --user=$(id -u):$(id -g) -v $(pwd):/app -v ~/.cache/composer:/composer/cache composer/composer:1-alpine'

Ahora creamos el proyecto Drupal 8:

$ composer create-project drupal-composer/drupal-project:8.x-dev NombreDelProyecto --stability dev --no-interaction

Composer create Drupal 8 project

El comando anterior nos crea un proyecto nuevo en la carpeta NombreDelProyecto. La principal diferencia con una instalación "normal" de Drupal es que la carpeta vendor se encuentra fuera de la raíz del sitio web y que la parte pública está en la carpeta web.

Si abrimos el archivo composer.json podremos ver todas las dependencias del proyecto y modificar las versiones de las librerías o de los módulos si fuera necesario.

Añadiendo módulos

Lo primero que vamos a hacer una vez hemos creado el proyecto es añadirlo a un repositorio, para registrar todos los cambios que hacemos desde el principio. Hay que tener en cuenta que al repositorio solo se va a añadir nuestro código y los archivos de configuración, el código de Drupal y de terceros lo descargará composer cada vez que sea necesario. Por ejemplo cuando despleguemos en otro entorno.

NombreDelProyecto $ git init
NombreDelProyecto $ git add -A
NombreDelProyecto $ git commit -m "Código inicial del proyecto"

Ahora vamos a instalar un par de módulos. Para desarrollar viene muy bien el módulo Devel, aunque la verdad es que cada vez más me estoy acostumbrando más a usar Xdebug para inspeccionar el contenido de las variables, que era la principal utilidad que le daba a Devel. Por supuesto Devel tiene muchas más funcionalidades.

Le decimos a composer que queremos instalar el módulo pero solo para desarrollo:

NombreDelProyecto $ composer require --dev drupal/devel 8.x

Y para gestionar cómodamente toda el área de administración de Drupal vamos a instalar Admin Toolbar, que no entiendo como no viene incluído como parte del core de Drupal 8:

NombreDelProyecto $ composer require drupal/admin_toolbar

Install devel and admin_toolbar with composer

Los módulos se descargan dentro de la carpeta web/modules/contrib. Si usamos git status para ver los archivos que han cambiado podemos verificar que efectivamente los módulos de terceros no van a incluirse en nuestro repositorio. Con git diff composer.json podremos ver que cambios han realizado los comandos anteriores:

GIT diff file composer.json

El módulo admin_toolbar se ha añadido a la sección require y devel a require-dev. Cuando le digamos a composer que descargue todas las dependencias de nuestro proyecto podremos hacerlo incluyendo o no los módulos de desarrollo, dependiendo del entorno donde estemos realizando el despliegue. El otro archivo modificado, composer.lock, es donde composer almacena la versión exacta de cada módulo o librería utilizados en el proyecto. Pero no voy a entrar a ese nivel ya que esto no es una guía para aprender a usar composer, si no para crear un proyecto Drupal con esta herramienta.

Actualizando el proyecto

Cada vez que queramos comprobar si hay versiones nuevas disponibles de Drupal, o de alguno de los módulos que utilizamos en el proyecto, debemos ejecutar:

NombreDelProyecto $ composer update

De esta forma composer comprobará si existe alguna versión nueva siguiendo las reglas especificadas en el archivo composer.json. Si deseamos, por ejemplo, que el core de Drupal solo sea actualizado cuando nosotros queramos debemos cambiar la línea "drupal/core": "~8.0" por "drupal/core": "8.1.9" especificando la versión exacta que queremos utilizar.

Desplegando el código

Para finalizar vamos a guardar los cambios en el repositorio y a probar a hacer un clone en otra carpeta para instalar el proyecto simulando un nuevo entorno:

NombreDelProyecto $ git commit -am "Añadir módulos base"
NombreDelProyecto $ cd ..
$ git clone NombreDelProyecto NuevoEntorno
$ cd NuevoEntorno

Si ahora vemos el contenido de la nueva carpeta y de la carpeta web dentro de esta comprobaremos que la carpeta vendor no existe y que tampoco está el core de Drupal ni los módulos que instalamos en web/modules/contrib. Para que composer los descargue debemos ejecutar:

NuevoEntorno $ composer install

O bien composer install --no-dev para no incluir los módulos que solo son necesarios para el entorno de desarrollo, en este caso Devel más algunas librerías PHP. Podemos hacerlo a continuación y veremos como los elimina:

composer removing dev dependencies

Como verás es una herramienta muy potente que aporta un grado más a la hora de utilizar Drupal como un framework de desarrollo en PHP en vez de como un gestor de contenidos.

En cuanto disponga de más tiempo libre voy a continuar con otro artículo poniendo en marcha esta web en un contenedor Docker con Apache y realizando la instalación de Drupal desde la línea de comandos con Drush, que si te has fijado composer lo ha descargado, junto con Drupal console, y están disponibles en la carpeta vendor/bin.

Juan Miguel Sosso

Añadir nuevo comentario