2009-06-09 8 views
8

J'ai utilisé yuicompressor.jar sur mon serveur de test pour la minimisation à la volée des fichiers JavaScript modifiés. Maintenant que j'ai déployé le site sur le serveur public, j'ai remarqué que les politiques du serveur interdisent l'utilisation de exec() ou de ses équivalents, donc plus d'exécution java pour moi.YUICompressor ou similaire en PHP?

Existe-t-il un compresseur JS à la volée implémenté en PHP? La seule chose qui ressemblait à cela que j'ai pu trouver était Minify, mais il s'agit plutôt d'une solution de compression à part entière avec cache et tout. Je veux séparer les fichiers et faire en sorte que les fichiers minimisés suivent mes propres conventions de nommage, donc Minify est un peu trop complexe à cet effet.

L'outil, comme yuicompressor, devrait être capable de prendre un nom de fichier ou un code JavaScript en entrée et devrait soit écrire dans un fichier, soit éditer le code compressé.

EDIT: Pour clarifier, je cherche quelque chose qui ne doit pas être utilisé seul (c'est-à-dire qui peut être appelé depuis une fonction, plutôt que de renifler mes variables GET). Si je voulais juste un compresseur, Minify serait évidemment un bon choix.

EDIT2: Beaucoup de choses ont changé au cours des cinq années depuis que j'ai posé cette question. Aujourd'hui, je recommande fortement de séparer le flux de travail frontal du code du serveur. Il existe de nombreux bons outils pour le développement JS et à l'exception des améliorations jQuery les plus triviales, il est préférable d'avoir un workflow complet avec le groupage automatisé, le test et le filtrage et de déployer uniquement les bundles minifiés plutôt que les fichiers bruts.

Répondre

6

Oui il y a, c'est ce qu'on appelle minify.

La seule chose à laquelle il faut se préoccuper en termes de complexité est la mise en place d'un groupe, et il n'y a vraiment rien à y faire. Modifiez le fichier groupsConfig.php si vous voulez plusieurs JS/CSS dans un <script> ou <link> déclaration:

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') 
); 

Pour inclure le groupe ci-dessus 'js-common', faites ceci:

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

Comme je l'ai dit. Je ne peux pas trouver un moyen d'exécuter minify à partir d'une application. Heck, il s'attend même à ce que certains paramètres GET soient définis plutôt que de prendre un nom de fichier comme argument. C'est probablement bien, mais pas ce que je cherche. –

+0

Minify n'est pas complexe. Vous pouvez avoir un fichier spécifique minifié simplement en utilisant quelque chose comme karim79

+1

Il est complexe en termes de son "API". En fait, il n'en a pas vraiment. C'est un outil autonome qui lit superglobals pour l'entrée. Si vous pouvez me diriger vers un wrapper qui me permet d'utiliser Minify depuis une application, ce serait une option valide. –

0

Essayez Lissa :

Lissa est un utilitaire de chargement CSS et JavaScript générique. Lissa est une extension de YUI PHP Loader visant à résoudre l'une des limitations actuelles du chargeur; chargement de combo. YUI PHP Loader est livré avec un chargeur combo capable de réduire les requêtes HTTP et d'augmenter les performances en générant toutes les exigences JavaScript et/ou CSS de YUI en une seule requête par type de ressource. Ce qui signifie que même si vous aviez besoin de 8 composants YUI qui se résument à dire 13 fichiers, vous ne feriez que 2 requêtes HTTP; un pour le CSS et un autre pour le JavaScript. C'est génial, mais qu'en est-il des ressources non-YUI personnalisées. YUI PHP Loader va les charger, mais il les charge comme inclus séparément et ainsi ils manquent les avantages du service combo et le nombre de requêtes HTTP pour la page augmente. Lissa contourne cette limitation en utilisant le YUI PHP Loader pour gérer le chargement et le tri des dépendances de ressources YUI et/ou personnalisées et les paires fonctionnelles avec Minify.

3

(je sais que je recherchais exactement la même chose de ne pas savoir comment traiter directement avec le fichier jar en utilisant php - voilà comment je suis arrivé ici si je partage ce que je trouve)

Minify est une immense bibliothèque avec des tonnes de fonctionnalités.Cependant, la partie minifying est une classe très petite: http://code.google.com/p/minify/source/browse/trunk/min/lib/Minify/YUICompressor.php

& très très facile à utiliser:

//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) 

même processus pour js, si vous avez besoin de plus de fonctionnalités choisir seulement de la bibliothèque & lire la source pour voir comment vous pouvez faire un appel direct depuis votre application.

Je ne l'ai pas lu la question bien, puisque rapetisser est basé sur l'utilisation des fichiers jar, op ne peut pas l'utiliser quand même avec sa configuration serveur

Minify comprennent également d'autres méthodes de minifying que Yui, par exemple :

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

+0

Votre premier lien n'a pas fonctionné pour moi. J'ai utilisé https://code.google.com/p/minify/source/browse/min/lib/Minify/YUICompressor.php – Aust

Questions connexes