DEV Community

Fenix
Fenix

Posted on

Drupal, composer y PHP

Image description

Intro

En el tránsito de su versión 7 a 8 la comunidad Drupal reescribió el 70% del código fuente. En ese titánico esfuerzo se adoptarón 'mejores prácticas' y se busco un cierta convergencia con la comunidad y las herramientas del lenguaje de programación PHP. En particular, la adopción de Symfony como framework subyacente y Twig como motor de plantillas para el llamado 'frontend' (diseño, o 'Theme' en la jerga Drupal). Una de las derivadas es que la gestión de paquetes PHP se realiza mediante Composer. De ello hablaremos aquí hoy.

¿Por qué Composer?

Veamos porque no es suficiente con descargar los módulos Drupal como hacíamos antaño, y el porque de la necesidad de'otra herramienta'

  • los módulos contribuidos y temas (diseño) a menudo requieren de librerías de terceros instaladas via Composer.En la ausencia de Composer en el proyecto, necesitarías manejar estos de forma individual al descargar: cosa que es mejor evitar.
  • algunos paquetes y módulos únicamente son compatibles con determinadas versiones de PHP y de Drupal. Es necesario identificar esos requisitos y gestionarlo.
  • algunos paquetes y módulos entran en conflicto con otros paquetes. Se requeriría que leyeras el fichero composer.json para gestionar ese aspecto.
  • cuando actualizas paquetes o una versión de PHP, necesitarías tener en cuenta y aplicar todo lo descrito anteriormente una y otra vez.
  • por último, el uso de 'drush' ha sido 'deprecado' en favor de Composer.

De ahí la clara necesidad del uso de un gestor de paquetes. Un buen punto de partida es la estupenda documentación en Drupal.org al respecto. Así pues instala Composer en tu computadora para
que realize por tí todo ese minucioso trabajo.

Hay disponible una plantilla Composer para proyectos Drupal, desda la que puedes clonar el proyecto

https://github.com/drupal/recommended-project
Enter fullscreen mode Exit fullscreen mode

Es el punto de partida recomendado en este nuevo flujo de trabajo (workflow) en una instalación de Drupal 8.
Asegurate antes de que dispones como base una versión de PHP compatible. Y ahora sí ejecuta:

$ composer create-project drupal/recommended-project:8.x-dev mi-dir --no-interaction
Enter fullscreen mode Exit fullscreen mode

NOTA: para usar la recién liberada versión 9 del core : 9.x-dev

Ello copiará el drupal-project en un directorio de ejemplo mi-dir' , y descargará el núcleo (core) Drupal y algunos paquetes útiles. Este es el momento de acceder al directorio mencionado y ejecutar

$ cd mi-dir
$ git init
Enter fullscreen mode Exit fullscreen mode

inicializando el repositorio de trabajo en local, para luego realizar el 'git commit' original del proyecto, si vas querer manejarlo con control de versiones y todas sus ventajas.

Este puede ser un buen momento para echar un vistazo al fichero composer.json :

{
    "name": "drupal-composer/drupal-project",
    "description": "Project template for Drupal 8 projects with composer",
    "type": "project",
    "license": "GPL-2.0-or-later",
    "authors": [
        {
            "name": "",
            "role": ""
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://packages.drupal.org/8"
        }
    ],
    "require": {
        "php": ">=7.0.8",
        "composer/installers": "^1.2",
        "cweagans/composer-patches": "^1.6.5",
        "drupal/console": "^1.0.2",
        "drupal/core": "^8.8.0",
        "drupal/core-composer-scaffold": "^8.8.0",
        "drush/drush": "^9.7.1 | ^10.0.0",
        "vlucas/phpdotenv": "^4.0",
        "webflo/drupal-finder": "^1.0.0",
        "zaporylie/composer-drupal-optimizations": "^1.0"
    },
    "require-dev": {
        "drupal/core-dev": "^8.8.0"
    },
    "conflict": {
        "drupal/drupal": "*"
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "config": {
        "sort-packages": true
    },
    "autoload": {
        "classmap": [
            "scripts/composer/ScriptHandler.php"
        ],
        "files": ["load.environment.php"]

    ... 
    ... 
       }
}
Enter fullscreen mode Exit fullscreen mode

contenido en el repositorio clonado.

Observamos que se requiere

    "require": {
        "php": ">=7.0.8",
..

Enter fullscreen mode Exit fullscreen mode

PHP versión 7 o superior, y el núcleo (core) Drupal.

      "drupal/core": "^8.8.0
Enter fullscreen mode Exit fullscreen mode

Este fichero sirve de "receta" para el proyecto, orquestando las versiones de los diferentes paquetes.

¿ Como descargo módulos y themes Drupal?

Superado el uso de 'drush dl' (habitual en Drupal 7) para obtener modulos contribuidos y Themes, hay que acostumbrarse al 'Composer workflow' y sacarle partido.
La sintaxis para la selección requerida es diferente, y en la mayoría de casos conviene no realizar (git) commit de los ficheros descargados en tu repositorio.

Para la mayoría de los casos basta con ejecutar

$ composer require [vendor]/[packagename]
Enter fullscreen mode Exit fullscreen mode

para obtener el paquete deseado. La mayoría de módulos contribuidos y Themes se alojan en un repositorio Composer dedicado, el cual es configurado por 'drupal-project' por defecto. Ello implica que podemos usar drupal como 'vendor' para descargar módulos Drupal y Themes que son mantenidos en drupal.org.

Por ejemplo, si ahora quieres obtener el módulo Devel, puedes usar el siguiente comando:

$ composer require drupal/devel
Enter fullscreen mode Exit fullscreen mode

Para la mayoría de los casos, esto descargará la más reciente y estable versión del módulo Devel compatible con tu versiones de Drupal y PHP en uso.
Si usaste el repostoria 'drupal-project' mencionado, el módulo será descargado en la carpeta web/modules/contrib de forma estándar.

Como vemos, esto nos proporciona un flujo de trabajo/workflow sólido desde el manejar nuestro proyecto. Para que el éxito del mismo tan sólo falta combinarlo con Git, el sistema de control de versiones software por excelencia.
De eso (Drupal PHP + Composer + Git workflow ) hablaremos en futuros blogposts.

Esperamos te resulten útiles estas prácticas tanto o más que a nosotros en Librebits.

Have Fun | A disfrutar

Fuentes:

Top comments (0)