2014-07-01 10 views
5

Ho un modulo che chiama require su una libreria Javascript. Sto cercando di comprimere i file .js miei con Django-Pipeline, ma dopo collectstatic la pagina web dà l'errore:Django + Django-Pipeline con Javascript "Richiedi"

UncaughtReferenceError: require is not Defined 

Normale test/deployment funziona bene con Collect-statico se io non uso Django-Pipeline per comprimere i file. Qual è l'impostazione corretta per minimizzare i miei file .js senza rompere le dipendenze - la documentazione è piuttosto scarsa. Il django-pipeline è la scelta giusta?

Modifica: ho provato a verificare che i modelli "richiesti" siano compressi per primi nella pipeline, ma non riesco a comprimere il modulo dal quale è stato chiamato il numero require senza che venga restituito un errore.

risposta

2

Questo perché il compressore JS (YUGLIFY per esempio) è anche minifying javascript nomi di variabili, in modo da require potrebbe essere stato chiamato a qualcosa come x o y. Per superare questo set di opzioni appropriate nel tuo compressore JS, per non minimizzare i nomi delle variabili.

http://django-pipeline.readthedocs.org/en/latest/compressors.html#pipeline-yui-js-arguments

Per Yuglify, questo argomento sarebbe mangle:False, che sarebbe smettere di pressare i nomi.

+0

+1. Hai ragione che l'impostazione 'mange: false' risolverà l'interruzione' require' - ma si finisce comunque per minimizzare l'intera libreria (350kb in questo caso), che è un po 'meno. Quindi penso che dovrò provare 'django-require'. – user3467349

4

Secondo la mia esperienza, è difficile combinare sia require.js che django-pipeline (anche se sono entrambi grandi progetti).

Ho lavorato su un progetto che utilizza require.js per tutti i suoi javascript. Ho provato a usare django-pipeline ma non ho potuto farlo funzionare correttamente con require.js. Abbiamo finito con il lavoro con https://github.com/etianen/django-require per il javascript e con la pipeline di django per la minificazione della css.

Io suggerirei di provare a rimuovere require.js e manualmente includendo la libreria che sta importando usando la pipeline, o usando require.js per costruire e minimizzare tutte le risorse javascript. Potresti aggiungere un nuovo passaggio che crea tutti i tuoi file javascript e collegarli a quelli direttamente nei modelli o utilizzando la pipeline.

Spiacente, questa potrebbe non essere una "soluzione" reale alla tua risposta, ma hai chiesto "La pipeline di django è la scelta giusta?" :)

+0

concordato. La gestione dei CSS con django-pipeline è ottima, ma in termini di JS è assolutamente possibile utilizzare una soluzione più flessibile come django-require. –