2013-04-15 5 views
8

Sono un grande fan di Clojure e ClojureScript e generalmente preferisco usare ClojureScript rispetto ad altre alternative per i miei progetti, ma una cosa che a volte mi trattiene dal suo utilizzo, in particolare su progetti più piccoli, è il ~ 80kb aggiunto con l'inclusione della libreria Google Closure nel javascript generato, anche quando non faccio uso dell'apis nel mio codice.Posso compilare ClojureScript senza la lib di Google Closure?

C'è un modo per compilare ClojureScript che eviti questo sovrappeso?

+7

@ColeJohnson: Paziente: "Dr. I ha problemi mentre respira". Dottore: "Non respirare e starai bene". ;) – Ankur

risposta

11

La dimensione extra non proviene dalla libreria di Google Closure --- se si sono attivate le ottimizzazioni avanzate il compilatore Closure rimuoverà qualsiasi codice di libreria di chiusura che non si sta utilizzando dal JavaScript finale. Piuttosto, JavaScript sembra grande perché c'è un intero runtime Clojure che implementa cose come pigri seq, promesse e tutto il resto.

+0

Come accennato nel mio altro commento, questa è la risposta giusta, non l'altra. – Zubair

+0

Ho verificato che @Zubair è corretto e modificato la mia risposta. – JohnJ

+0

Vedo, non mi ero reso conto che tutto quel javascript era il runtime ClojureScript. Grazie. – Dane

6

Correzione: come indicato da Zubair, il passaggio seguente disattiva l'ottimizzazione di Google Closure ma NON elimina il codice di chiusura di Google dal JavaScript finale. Dovresti scegliere l'ottimizzazione avanzata per eliminare JavaScript non utilizzato come suggerisce l'altra risposta.


In ClojureScript: Up and Running, gli autori spiegano come disattivare la fase di chiusura di Google:

Con un valore :optimizations di :none [in project.clj], Google Closure Compiler non sarà invocato a tutti, e la build scriverà direttamente il codice JavaScript prodotto dal compilatore ClojureScript. Questa modalità è utile per lo sviluppo e il debug. Tuttavia, l'output JavaScript sarà diviso in molti singoli file, che richiede un po ' trattamento diverso in un browser [...]

Si noti che questo può o non può ridurre la dimensione del prodotto JavaScript, dal momento che Google Closure fa un bel po 'di lavoro per eliminare qualsiasi cosa il tuo codice non invochi specificatamente. Probabilmente vale la pena di giocare con i vari valori di :optimizations (:none, :whitespace, :simple e :advanced) e vedere quanto è grande il JavaScript risultante in ogni caso.

+0

Grazie, farò un tentativo. – Dane

+1

Questa risposta è sbagliata. La domanda chiede come escludere la Google Closure Library, che è la libreria dell'interfaccia utente per la chiusura di google. Questa risposta dice come non eseguire il compilatore di chiusura sul tuo codice. – Zubair

+0

@Zubair è corretto - Ho modificato la risposta di conseguenza. – JohnJ