YUI-Compressor quedó obsoleto (deprecated)

Algunos hemos tenidos complicaciones al compilar nuestros js (y otros incluso consultaron al respecto en este foro).
Como se habrán dado cuenta muchos, 3W utiliza YUI-Compresor para comprimir los js… el problema es que si escribimos JS “moderno” la herramienta no sabe como comprimirlo.
Sugiero reemplazarlo por uglify-es que es un branch de uglify compatible con ES6+ para lo cual primero deberán instalar los prerequisitos:

  1. instalar curl

sudo apt install curl

  1. Añadir el repositorio de NodeJS desde NodeSource

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

  1. Instalar NodeJS y npm

sudo apt install nodejs

Y finalmente instalamos uglify-es (modo consola):

sudo npm install uglify-es -g

Podría usarse el uglify standar pero no es compatible con ES6 y en mi caso uso algunas sintaxis ES6 en mis personalizaciones (parámetros de funciones con valores por defecto, buscar por valor en arrays, etc).
Luego, toca actualizar Chulupi (estaría buenísimo que en una próxima versión del framework este cambio se incluya) para lo cual habrá que editar SIU\Chulupi\consola\comandos\CompilarRecursos.php:

    protected function guardar_archivo($archivo, $path_nuevo, $comprimir = true, $absoluto = false) {
        if (!$absoluto) {
            $archivo = kernel::localizador()->path_recurso($archivo);
        }

        ManejadorArchivos::crear_archivo_con_datos($path_nuevo, '');
        if ($comprimir) {
            $encoding = kernel::proyecto()->get_encoding();
            //$cmd = "yui-compressor $archivo --charset $encoding -o $path_nuevo";
            $ext = explode('.', $archivo);
            $cmd = '';
            if (strtolower(end($ext)) === 'js') {
                // uglifyjs --compress --mangle --output <file> 
                $cmd = "uglifyjs --output $path_nuevo $archivo";
            } else {
                $cmd = "java -jar /var/www/SIU-Guarani3-3W/bin/yuicompressor-2.4.2.jar $archivo --charset $encoding -o $path_nuevo";
            }

            $this->mostrar_mensaje("$archivo");

            exec($cmd);
        } else {
            copy($archivo, $path_nuevo);
        }
    }

Uglify solamente procesa JS, para las hojas de estilos habrá que usar otra herramienta o seguir usando YUI-Compresor. De momento no tuve necesidad de cambiarlo.

Hola Diego,

Al compilar el código original del SIU no habría problemas con el YUI-COMPRESSOR, pero por lo que me decís ustedes tienen personalizaciones con sintaxis mas moderna de JS.

Vamos a tenerlo en cuenta para una futura version, por ahora ustedes usen esa solución que recomiendan.

Gracias por el aporte.

saludos.
2

Ya en modo quitar definitivamente el YUI-Compresor… pueden agregar un par de pasos más:

  1. Instalar uglifycss en modo consola:

sudo npm install uglifycss -g

Y reemplazar este if:


            $cmd = '';
            if (strtolower(end($ext)) === 'js') {
                // uglifyjs --compress --mangle --output <file>
                $cmd = "uglifyjs --output $path_nuevo $archivo";
            } else {
                $cmd = "java -jar /var/www/SIU-Guarani3-3W/bin/yuicompressor-2.4.2.jar $archivo --charset $encoding -o $path_nuevo";
            }

por:

$ext = strtolower(end($ext));
$cmd = "uglify$ext --output $path_nuevo $archivo";

Hola Diego, gracias por la recomendación!!!

¿que archivo es el que te dio error al comprimirlo?
¿Era uno del core o una personalización?

Si podes pasame el tipo de sintaxis que YUI-Compresor no soporta.

Vamos a tenerlo en cuenta para la próxima versión, también estaba viendo otras alternativas:
https://github.com/matthiasmullie/minify
https://uncoverwp.com/course/increase-performance-combine-minify-css-with-php/
https://github.com/mrclay/minify

saludos.
2