2014-07-01 7 views
5

मेरे पास एक मॉड्यूल है जो जावास्क्रिप्ट लाइब्रेरी पर require पर कॉल करता है। मैं Django-पाइपलाइन के साथ मेरी .js फ़ाइलों को संपीड़ित करने के कोशिश कर रहा हूँ लेकिन collectstatic के बाद वेब पेज त्रुटि देता है:जावास्क्रिप्ट के साथ Django + Django-Pipeline "आवश्यकता"

UncaughtReferenceError: require is not Defined 

सामान्य परीक्षण/तैनाती कलेक्ट स्थैतिक के साथ ठीक काम करता है अगर मैं Django-पाइपलाइन का उपयोग नहीं करते फ़ाइलों को संपीड़ित करने के लिए। निर्भरताओं को तोड़ने के बिना मेरी .js फ़ाइलों को छोटा करने के लिए सही सेटअप क्या है - प्रलेखन एक प्रकार का विचित्र है। क्या डीजेंगो-पाइपलाइन सही विकल्प है?

संपादित करें: मैंने यह सुनिश्चित करने की कोशिश की है कि 'आवश्यक' मॉडल पहले पाइपलाइन में संपीड़ित हो जाएं, लेकिन मैं मॉड्यूल को संपीड़ित नहीं कर सकता कि require बिना किसी त्रुटि के इसे कॉल किया जाता है।

उत्तर

1

शायद यह PIPELINE_DISABLE_WRAPPER है। इसे True पर सेट करने का प्रयास करें।

https://django-pipeline.readthedocs.org/en/latest/configuration.html#wrapped-javascript-output

+0

मेरे पास PIPELINE_DISABLE_WRAPPER है - सही – user3467349

+0

मुझे लगता है कि Django-Pipeline सही ढंग से प्रक्रिया की प्रक्रिया नहीं कर सकता है? जब तक किसी के पास इसके लिए कोई अपडेट न हो। – user3467349

2

इसका कारण यह है अपने जे एस कंप्रेसर (YUGLIFY उदाहरण के लिए) जावास्क्रिप्ट चर नाम भी कम करने से है, इसलिए require सकता x या y की तरह कुछ करने के लिए नामित किया गया है देखें। परिवर्तनीय नामों को कम करने के लिए, इस जेएस कंप्रेसर में उचित सेट को सेट करने के लिए।

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

Yuglify के लिए, यह तर्क mangle:False होगा, जो ऐसे नाम mangling बंद कर देंगे।

+0

+1। आप सही हैं कि 'मंगे' सेटिंग: झूठी '' आवश्यकता 'ब्रेक को ठीक करेगी - लेकिन अभी भी पूरी लाइब्रेरी (इस मामले में 350 केबी) को कम करने के लिए समाप्त होता है, जो कि एक प्रकार का ऋण है। तो मुझे लगता है कि मुझे 'django-requ'' का प्रयास करना होगा। – user3467349

4

मेरे अनुभव में, requ.js और django-pipeline दोनों को जोड़ना मुश्किल है (भले ही वे दोनों महान परियोजनाएं हों)।

मैंने एक प्रोजेक्ट पर काम किया है जिसने अपने सभी जावास्क्रिप्ट के लिए require.js का उपयोग किया है। मैंने django-pipeline का उपयोग करने की कोशिश की लेकिन requ.js के साथ इसे ठीक से काम नहीं कर सका। हम जावास्क्रिप्ट के लिए https://github.com/etianen/django-require, और सीएसएस minification के लिए django-पाइपलाइन के साथ काम करना समाप्त कर दिया।

मैं या तो ज़रूरतों को हटाने की कोशिश कर रहा हूं और मैन्युअल रूप से लाइब्रेरी का उपयोग करके लाइब्रेरी का उपयोग कर रहा हूं, या अपनी सभी जावास्क्रिप्ट संपत्तियों को बनाने और कम करने के लिए require.js का उपयोग कर रहा हूं। आप एक नया कदम जोड़ सकते हैं जो आपकी सभी जावास्क्रिप्ट फ़ाइलों को बनाता है, और सीधे उन टेम्पलेट्स में या पाइपलाइन का उपयोग करके उनसे लिंक करें।

क्षमा करें, यह आपके उत्तर के लिए एक वास्तविक 'समाधान' नहीं हो सकता है, लेकिन आपने पूछा था "क्या डीजेंगो-पाइपलाइन सही विकल्प है?" :)

+0

सहमत हुए। डीजेंगो-पाइपलाइन के साथ सीएसएस को संभालना बहुत अच्छा है, लेकिन जेएस के मामले में हम पूरी तरह से अधिक लचीला समाधान जैसे डीजेंगो-आवश्यकता का उपयोग कर सकते हैं। –

संबंधित मुद्दे