2009-06-09 18 views
8

Ho usato yuicompressor.jar sul mio server di test per minimizzare al volo i file JavaScript modificati. Ora che ho distribuito il sito Web al server pubblico, ho notato che le politiche del server vietano l'uso di exec() o dei suoi equivalenti, quindi niente più esecuzione java per me.YUICompressore o simile in PHP?

C'è un decente compressore JS al volo implementato in PHP? L'unica cosa che assomiglia a questo che sono riuscito a trovare era Minify, ma è più una soluzione di compressione in piena regola con cache e tutto il resto. Voglio tenere separati i file e fare in modo che i file minimizzati seguano le mie convenzioni di denominazione, quindi Minify è un po 'troppo complesso per questo scopo.

Lo strumento, come yuicompressor, dovrebbe essere in grado di utilizzare un nome file o JavaScript come input e deve scrivere su un file o generare il codice JavaScript compresso.

EDIT: Per chiarire, sto cercando qualcosa che non deve essere usato come un autonomo (cioè può essere chiamato da una funzione, piuttosto che sniffare le mie variabili GET). Se volessi solo un compressore, Minify sarebbe ovviamente una buona scelta.

EDIT2: molto è cambiato nei cinque anni da quando ho fatto questa domanda. Oggi consiglio vivamente di separare il flusso di lavoro front-end dal codice del server. Ci sono molti buoni strumenti per lo sviluppo di JS in giro e, fatta eccezione per i miglioramenti jQuery più banali, è un'idea migliore avere un flusso di lavoro completo con bundling, testing e linting automatizzati e semplicemente distribuire i bundle minified piuttosto che i file raw.

risposta

6

Sì, lo si chiama minify.

L'unica cosa di cui preoccuparsi in termini di complessità è la creazione di un gruppo e non c'è davvero nulla. Modificare il file groupsConfig.php se si desidera più JS/CSS in uno <script> o <link> dichiarazione:

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

per includere il gruppo 'JS-comuni' di cui sopra, fare questo:

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

Come ho detto. Non riesco a trovare un modo per eseguire minify da un'applicazione. Diamine, si aspetta anche che determinati parametri GET siano impostati piuttosto che prendere un nome di file come argomento. Probabilmente è buono, ma non quello che sto cercando. –

+0

Minify non è complesso. Puoi avere un file specifico minificato semplicemente usando qualcosa come karim79

+1

È complesso in termini di "API". In realtà non ne ha davvero uno. È uno strumento autonomo che legge i superglobali per l'input. Se riesci a indicarmi un wrapper che mi permetta di usare Minify da un'applicazione, sarebbe un'opzione valida. –

0

Prova Lissa :

Lissa è un'utilità di caricamento CSS e JavaScript generica. Lissa è un'estensione del caricatore PHP YUI finalizzata a risolvere uno dei limiti del caricatore corrente; caricamento combo. YUI PHP Loader viene fornito con un caricatore combo che è in grado di ridurre le richieste HTTP e aumentare le prestazioni emettendo tutti i requisiti JavaScript e/o CSS di YUI come una singola richiesta per tipo di risorsa. Significa anche se avevi bisogno di 8 componenti YUI che alla fine si riducano a dire 13 file, continuerai a fare solo 2 richieste HTTP; uno per il CSS e un altro per il JavaScript. È grandioso, ma per quanto riguarda le risorse personalizzate non YUI. YUI PHP Loader li caricherà, ma li carica come include separati e quindi perdono i vantaggi del servizio combinato e il numero di richieste HTTP per la pagina aumenta. Lissa aggira questa limitazione utilizzando il caricatore PHP YUI per gestire il caricamento e l'ordinamento delle dipendenze YUI e/o delle risorse personalizzate e delle coppie che funzionano con Minify.

3

(so che stavo cercando la stessa cosa non sapendo come trattare direttamente con il file jar con php - è così che sono finito qui in modo che io sto condividendo quello che ho trovato)

Minify è una grande biblioteca con un sacco di funzionalità.Tuttavia la parte minifying è una piccolissima classe: http://code.google.com/p/minify/source/browse/trunk/min/lib/Minify/YUICompressor.php

& molto molto facile da usare:

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

stesso processo per js, se avete bisogno di più funzionalità basta scegliere dalla libreria & leggere il sorgente per vedere come puoi effettuare chiamate dirette dalla tua app.

non ho letto la questione e, dal momento minify si basa sull'utilizzo i file jar, l'op non è possibile utilizzare lo stesso con la sua configurazione del server

Minify includere anche altri metodi Minimizzando di Yui, per esempio :

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

+0

Il tuo primo collegamento non ha funzionato per me. Ho utilizzato https://code.google.com/p/minify/source/browse/min/lib/Minify/YUICompressor.php – Aust

Problemi correlati