2014-07-01 10 views
5

Ich habe ein Modul, das require auf einer Javascript-Bibliothek aufruft. Ich versuche, meine Js Dateien mit Django-Pipeline zu komprimieren, aber nach collectstatic die Web-Seite gibt den Fehler:Django + Django-Pipeline mit Javascript "Require"

UncaughtReferenceError: require is not Defined 

Normale Prüfung/deployment funktioniert mit collect statisch, wenn ich nicht Django-Pipeline verwenden um die Dateien zu komprimieren. Was ist das richtige Setup für die Minimierung meiner .js-Dateien ohne Abhängigkeiten zu brechen - die Dokumentation ist spärlich. Ist Django-Pipeline die richtige Wahl?

Edit: Ich habe versucht, um sicherzustellen, dass die 'erforderlichen' Modelle zuerst in der Pipeline komprimiert werden, aber ich kann nicht scheinen, das Modul zu komprimieren, das aufgerufen wird, ohne dass es einen Fehler zurückgibt.

Antwort

2

Dies liegt daran, Ihre JS Kompressor (YUGLIFY zum Beispiel) wird auch minifying Javascript Variablennamen, so require könnte so etwas wie x oder y genannt wurden. Um dies zu umgehen, setzen Sie die richtigen Optionen in Ihrem JS-Komprimierer, um die Variablennamen nicht zu minimieren.

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

Für Yuglify würde dieses Argument mangle:False, sein, welche die Namen Mangeln aufhören würde.

+0

+1. Sie sind richtig, dass die Einstellung 'mange: false' die 'require'-Pause beheben wird - aber einer endet immer noch in der Minimierung der gesamten Bibliothek (350kb in diesem Fall), was ein bisschen ein Minus ist. Also denke ich, dass ich 'django-require' ausprobieren muss. – user3467349

4

Meiner Erfahrung nach ist es schwierig, sowohl require.js als auch django-pipeline zu kombinieren (obwohl beide großartige Projekte sind).

Ich habe an einem Projekt gearbeitet, das require.js für all seine Javascript verwendet. Ich habe versucht, django-pipeline zu verwenden, konnte aber nicht mit require.js arbeiten. Wir haben am Ende mit https://github.com/etianen/django-require für das Javascript und Django-Pipeline für die CSS-Verkleinerung gearbeitet.

Ich würde entweder versuchen, require.js zu entfernen und manuell die Bibliothek, die es importiert mit Pipeline, oder mit require.js zu bauen und minimieren Sie alle Ihre Javascript-Assets. Sie könnten einen neuen Schritt hinzufügen, der all Ihre Javascript-Dateien erstellt und diese entweder direkt in den Vorlagen oder über die Pipeline verbindet.

Entschuldigung, das ist vielleicht keine wirkliche "Lösung" für Ihre Antwort, aber Sie haben gefragt "Ist Django-Pipeline die richtige Wahl?" :)

+0

Einverstanden. Die Handhabung von CSS mit django-pipeline ist großartig, aber in Bezug auf JS könnten wir eine flexiblere Lösung wie django-require verwenden. –