Drupal scaffold composer

Añadiendo información al robots.txt de Drupal usando composer.

En este caso concreto, al tener el sistema de integración continua que obtiene el código base desde Github y realiza un install de los módulos con composer no se puede modificar el fichero robots.txt de forma directa y subir al repositorio, ya que el composer install va a reemplazar ese fichero con el fichero scaffold del core de drupal y no se verán reflejados nuestros cambios.

Existen varias formas de solucionar esto usando composer. La primera es alterando la información de los ficheros usando append o preped para añadir dicha información:

  "name": "my/project",
  ...
  "extra": {
    "drupal-scaffold": {
      "file-mapping": {
        "[web-root]/robots.txt": {
          "append": "assets/my-robots-additions.txt"
        }
      },
      ...
    }
  }

Añadirá la información que tengamos en el fichero indicado al fichero scaffold que le indiquemos.

La segunda opción es parcheando el fichero. Según la documentación de Drupal es como un patch manual en vez de usar "cweagans/composer-patches". Entiendo que será porque necesita la ruta del módulo y usar como módulo a parchear "drupal/core" no creo que pudiera funcionar. 

  "name": "my/project",
  ...
  "scripts": {
    "post-drupal-scaffold-cmd": [
      "cd docroot && patch -p1 <../patches/htaccess-ssl.patch"
    ]
  }

Por último está la opción de indicarle que use nuestro propio fichero. 

{
  "name": "drupal/assets",
  ...
  "extra": {
    "drupal-scaffold": {
      "file-mapping": {
        "[web-root]/robots.txt": "assets/robots.txt"
      },
      ...
    }
  }
}

Hay más opciones y entre ellas está la opción de excluir los ficheros scaffold. Lo que nos dice la documentación respecto al tema de escluir ficheros es que es preferible usar las opciones append o prepend para modificar la información, ya que al excluir los ficheros nos vamos a perder las posibles actualizaciones que pueda tener.

  "name": "my/project",
  ...
  "extra": {
    "drupal-scaffold": {
      "file-mapping": {
        "[web-root]/robots.txt": false
      },
      ...
    }
  }

También te puede interesar:

PHP 8.2

Tiene nuevas funcionalidades, incluye readonly classes, null, false y true como tipos stand-alone, propiedades dinámicas obsoletas, mejoras de rendimiento y más.