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:
- instalar curl
sudo apt install curl
- Añadir el repositorio de NodeJS desde NodeSource
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
- 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.