Blog de Juan Miguel Sosso | Drupal | PHP | Docker

Instalar librerías npm y bower con composer

Composer + Bower + NPM

Estos días he tenido la necesidad de instalar varias librerías JavaScript requeridas por un par de módulos Drupal. Desde que trabajo con Drupal 8 procuro descargar todas las dependencias de terceros con composer, por lo que me puesto a investigar las opciones disponibles para descargar estas librerías de la forma más eficiente.

He descubierto el proyecto composer-asset-plugin que es un gestor de dependencias de NPM y Bower para composer. Pero he visto que se trata de una solución algo anticuada. Su principal inconveniente es que requiere ser instalado de forma global.

Entonces me he encontrado con https://asset-packagist.org, que es un packagist para composer de paquetes Bower y NPM.

Vamos a añadirlo a nuestro proyecto, en el apartado repositories del composer.json:

    "repositories": [
        {
            "type": "composer",
            "url": "https://packages.drupal.org/8"
        },
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ],

Debido a que composer/installers no conoce estos nuevos tipos de paquetes, npm-asset y bower-asset, tenemos que añadir una dependencia a composer-installers-extender para poder instalar las librerías en la ruta correcta. Por defecto los paquetes que descarga composer se instalan en la carpeta vendor y esto no es lo que queremos para las librerías JavaScript.

Por lo tanto lo instalamos con el comando:

$ composer require oomphinc/composer-installers-extender

Y volvemos a editar el archivo composer.json para añadir en la sección extra la configuración para estos tipos de paquetes:

    "extra": {
        "installer-types": [
            "bower-asset",
            "npm-asset"
        ],
        "installer-paths": {
            "html/libraries/{$name}": [
                "type:drupal-library",
                "type:bower-asset",
                "type:npm-asset"
            ]
        }
    }

La sección de installer-paths tendrás que modificarla según tus necesidades. Por ejemplo, la raíz de mi web está en html, pero tú puedes tenerla en web por lo que la ruta sería "web/libraries/{$name}".

Una vez hecho esto ya podemos instalar las librerías JavaScript con composer, por ejemplo:

$ composer require npm-asset/blazy

Espero que en el futuro esto se encuentre integrado en Drupal cuando creamos un proyecto con drupal/recommended-project.

Juan Miguel Sosso

Añadir nuevo comentario