Minificar PHP con gulp

En este artículo vamos a aprender a minificar código PHP empleando una tarea de gulp. El objetivo didáctico de esto es ver que con gulp podemos hacer mucho más que transpilar(1) SASS a CSS. Si bien esa es la prestación que hemos empleado en los anteriores artículos de esta serie para familiarizarnos con gulp, en realidad esta herramienta nos permite gran llevar a cabo una gran variedad de tareas. En Internet existen plugins para hacer cualquier cosa que se nos ocurra o que podamos llegar a necesitar. En este caso vamos a minificar código PHP, eliminando todos los comentarios, espaciados innecesarios, indentaciones, saltos de línea… En fin, todo aquello que nos facilita la mantenibilidad de nuestro código, pero que luego abulta más de la cuenta y no debería estar en producción.

(1) Transpilar es el término comúnmente aceptado que se refiere a convertir, por ejemplo, código SASS en CSS. En los artículos anteriores nos hemos referido a esta operación como compilar, por convencionalismo, y también dijimos que, realmente, no se trata de una compilación en el sentido estricto de la palabra. Transpilar es un término de relativamente reciente acuñación para referirnos a estos procesos. En lo sucesivo lo emplearemos con mucha frecuencia, para estar más en línea con la forma actual de expresarse.

EL ESCENARIO

Para ver como podemos usar gulp para minificar código PHP vamos a partir de un ejemplo escrito en este lenguaje que hemos empleado en este artículo (puedes descargarte todo el código original desde este enlace). Nos viene al dedillo, ya que incluye varios scripts en PHP que podemos minificar con toda facilidad mediante una sóla tarea de gulp.

En el proyecto hemos introducido algunos pequeños cambios, que son necesarios para gestionar la tarea de minificación de PHP con gulp. Son los siguientes:

  • Hemos creado un directorio src_min. En este se alojarán los códigos PHP minificados, de forma que será, realmente, el directorio donde se almacenarán las clases y las interfaces para producción. Nos reservamos el antiguo directorio src para desarrollo. Por lo tanto, en el directorio src_min no grabaremos nada (será gulp quien lo haga), y el directorio src no lo subiremos a producción cuando llegue el momento, ya que sólo es útil, ya, para desarrollo.
  • Hemos modificado el autoloader, para que busque las clases en src_min, en lugar de buscarlas en src. En concreto, hemos sustituido la línea:
    $script = ROOT.DS.'src'.DS.str_replace("\\", DS, $script).'.php';
    por
    $script = ROOT.DS.'src_min'.DS.str_replace("\\", DS, $script).'.php';
  • Hemos instalado, en la raíz de nuestro proyecto, el núcleo de gulp, tal cómo ya sabemos hacerlo (lee este artículo, si tienes dudas).
  • Hemos instalado el plugin que vamos a usar para minificar PHP. Se llama gulp-php-minify y hay varias distribuciones en Internet, algunas de las cuales se consideran obsoletas. Nosotros hemos usado la de cedx, que está plenamente vigente. Lo hemos instalado con la siguiente instrucción en consola:
    npm install --save-dev @cedx/gulp-php-minify
    Observa la @ que precede a cedx. Cuando se instala un plugin del que hay varias distribuciones con el mismo nombre (en este caso, gulp-php-minify) el nombre de la distribución se precede con @ y se separa del nombre del plugin en sí con /.

Una vez hechos estos retoques, nos toca crear el fichero gulpfile.js, como vemos en el siguiente apartado.

EL FICHERO gulpfile.js

Este fichero es, como ya sabemos, nuestro gestor de tareas. En el ejemplo de este artículo es extremadamente simple, ya que sólo lleva a cabo una tarea muy sencilla, pero tiene algún detalle que debemos comentar. El listado del fichero es el siguiente:

Para entender el código, presta especial atención a las líneas resaltadas. En primer lugar vemos que usamos la declaración obligatoria de variables que pone a nuestra disposición JS6, en la primera línea del código.

A continuación observa que, a la hora de crear un objeto que implemente el plugin que vamos a usar, el nombre de dicho objeto va rodeado por llaves ({ y }). Esto es algo que hay que hacer con algunos plugin en concreto. Cuando es necesario, lo ves detallado en la página de la documentación del plugin, por lo que no tienes que preocuparte de aprenderte cada caso de memoria. en concreto, la página de documentación de este plugin es https://www.npmjs.com/package/@cedx/gulp-php-minify/.

Lo siguiente que nos llama la atención es que, en el método src() aparece un * seguido de / en el nombre del directorio dónde vamos a buscar los PHP originales. Esto le indica a gulp que debe buscar los ficheros de origen en todos los subdirectorios que «cuelguen» del directorio especificado.

Por lo demás, el resto del gestor de tareas es similar a la sintaxis que ya conocemos, y se emplea del mismo modo: invocando el comando gulp desde la consola y, cada vez que efectuemos un cambio en alguno de los PHP originales, se minificarán todos los PHP que haya dentro de los subdirectorios de src.

CONCLUYENDO

La lista de posibilidades de gulp, así como de los plugins que la llevan a cabo, es increiblemente extensa, y te permite automatizar cualquier tarea que se te ocurra. Si quieres echar un vistazo al estado actual del repositorio público de plugins de gulp en Internet, puedes mirar en este enlace, aunque la lista «real» es bastante más amplia de lo que aparece, ya que continuamente la comunidad está creando y publicando nuevos plugins.

ATENCIÓN. Mi consejo es que, dada la gran variedad de plugins «oficiales» que existen, y que cubren todas las necesidades, no recurras a plugins publicados por autores desconocidos en páginas de dudoso origen. Esto se debe a dos cosas. En primer lugar, un plugin «anónimo», o semi anónimo puede parecer funcionar, pero estar haciendo «algo» por debajo de lo que se ve, de lo que no seas consciente, y que no te convenga. La otra razón es que un plugin publicado por un autor no reconocido en la comunidad puede dejar de recibir apoyo o mantenimiento, con lo que, en algún tiempo, puedes encontrarte empleando una herramienta obsoleta, para la que no hay alternativas. Las páginas reconocidas de plugins de gulp, que yo te aconsejo, son, principalmente, esta y esta.

Los códigos para seguir este artículo los encontrarás en este enlace. Te los he dejado sin gulp ni el plugin correspondiente, para que te los instales tú, aunque sí te he incluido la estructura y el fichero de gestión de tareas.

   

Deja un comentario