2009-06-09 10 views
8

He estado usando yuicompressor.jar en mi servidor de prueba para minimizar al instante los archivos JavaScript modificados. Ahora que he desplegado el sitio web en el servidor público, noté que las políticas del servidor prohíben el uso de exec() o sus equivalentes, por lo que no hay más ejecución de Java para mí.YUICompressor o similar en PHP?

¿Existe un compresor JS sobre la marcha implementado en PHP? Lo único parecido a esto que pude encontrar fue Minify, pero es más una solución de compresión completa con caché y todo. Quiero mantener los archivos separados y hacer que los archivos minimizados sigan mis propias convenciones de nomenclatura, por lo que Minify es demasiado complejo para este propósito.

La herramienta, como yuicompressor, debería poder tomar un nombre de archivo o JavaScript como entrada y escribir en un archivo o imprimir el JavaScript comprimido.

EDITAR: Para aclarar, estoy buscando algo que no tenga que ser utilizado como independiente (es decir, se puede invocar desde una función, en lugar de olfatear mis variables GET). Si solo quisiera un compresor, Minify obviamente sería una buena opción.

EDIT2: Mucho ha cambiado en los cinco años desde que hice esta pregunta. Hoy recomendaría encarecidamente separar el flujo de trabajo de la interfaz de usuario del código del servidor. Hay muchas herramientas buenas para el desarrollo de JS y, a excepción de las mejoras jQuery más triviales, es una mejor idea tener un flujo de trabajo completo con paquetes, pruebas y salpicaduras automatizados y simplemente implementar los paquetes minificados en lugar de los archivos sin procesar.

Respuesta

6

Sí, se llama minify.

Lo único que hay que preocuparse por la complejidad es configurar un grupo , y realmente no hay nada. Editar el archivo groupsConfig.php si quieres múltiples JS/CSS en una <script> o <link> declaración:

return array(
    'js-common' => array('//js/jquery/jquery-1.3.2.min.js', '//js/common.js', '//js/visuals.js', 
'//js/jquery/facebox.js'), 
    'css-common' => array('//css/main.css', '//css/layout.css','//css/facebox.css') 
); 

para incluir el Grupo 'js-comunes anteriormente, hacer esto:

<script type="text/javascript" src="/min/g=js-common"></script> 
+1

Como ya he dicho. No puedo encontrar una forma de ejecutar minify desde dentro de una aplicación. Diablos, incluso espera establecer ciertos parámetros GET en lugar de tomar un nombre de archivo como argumento. Probablemente sea bueno, pero no es lo que estoy buscando. –

+0

Minificar no es complejo. Puede tener un archivo específico minimizado simplemente usando algo como karim79

+1

Es complejo en términos de su "API". En realidad, realmente no tiene uno. Es una herramienta independiente que lee superglobales para la entrada. Si puede indicarme un contenedor que me permita usar Minify desde dentro de una aplicación, sería una opción válida. –

0

Trate Lissa :

Lissa es una utilidad genérica de carga de CSS y JavaScript. Lissa es una extensión de YUI PHP Loader que tiene como objetivo resolver una de las limitaciones actuales del cargador; carga combinada YUI PHP Loader se envía con un cargador combinado que es capaz de reducir las solicitudes HTTP y aumentar el rendimiento al generar todos los requisitos de YUI JavaScript y/o CSS como una única solicitud por tipo de recurso. Es decir, incluso si necesitaras 8 componentes de YUI que finalmente se reducen a 13 archivos, solo harías 2 solicitudes HTTP; uno para el CSS y otro para el JavaScript. Eso es genial, pero ¿qué pasa con los recursos personalizados que no son de YUI? YUI PHP Loader los cargará, pero los carga como incluye por separado y así se pierden los beneficios del servicio combinado y aumenta el número de solicitudes HTTP para la página. Lissa trabaja alrededor de esta limitación usando el YUI PHP Loader para manejar la carga y el tipo de YUI y/o las dependencias de recursos personalizadas y los pares que funcionan con Minify.

3

(Sé que estaba buscando exactamente lo mismo sin saber cómo tratar directamente con el archivo JAR utilizando php - así es como terminé aquí, así que estoy compartiendo lo que encontré)

Minify es una gran biblioteca con toneladas de funcionalidades.Sin embargo la parte minifying es una clase muy pequeña: http://code.google.com/p/minify/source/browse/trunk/min/lib/Minify/YUICompressor.php

& muy, muy fácil de usar:

//set the path to the jar file 
Minify_YUIcompressor::$jarFile=_ROOT.'libs/java/yuicompressor.jar'; 
//set the path to a writable temp folder 
Minify_YUIcompressor::$tempDir=_ROOT.'temp/'; 

//minify 
$yourcssminified=Minify_YUIcompressor::minifyCss($yourcssstringnotminified,$youroptions) 

mismo proceso para js, si necesita más funcionalidades acaba de recoger de la biblioteca & leer la fuente para ver cómo puedes hacer una llamada directa desde tu aplicación.

no he leído la pregunta, así, ya Minify se basa en el uso de los archivos jar, el OP no se puede utilizar de todos modos con su configuración del servidor

Minify también incluir otros métodos minifying que Yui, por ejemplo, :

http://code.google.com/p/minify/source/browse/trunk/min/lib/JSMinPlus.php?r=443&spec=svn468

+0

Su primer enlace no funcionó para mí. Usé https://code.google.com/p/minify/source/browse/min/lib/Minify/YUICompressor.php – Aust