2014-09-18 7 views
5

मैं ReactJS के लिए Mixin लिख रहा हूं। मैं इसे कुछ सत्यापन करना चाहता हूं, लेकिन केवल जब development mode में ReactJS का उपयोग किया जा रहा है।मैं कैसे बता सकता हूं कि ReactJS जावास्क्रिप्ट से विकास मोड में है या नहीं?

मैं जावास्क्रिप्ट से कैसे निर्धारित कर सकता हूं कि ReactJS विकास या उत्पादन मोड में है या नहीं?

+0

आप वेबपैक के साथ '__DEV__' चर सेट कर सकते हैं .. –

+0

यदि आप एक मिक्सिन लिख रहे हैं, तो संभवतः आप उपयोगकर्ताओं को ReactJS को पुनर्निर्माण करने के लिए मजबूर नहीं करना चाहते हैं। – danvk

उत्तर

10

ReactJS स्रोत इसे ट्रैक करने के लिए __DEV__ नामक चर का उपयोग करता है, लेकिन यह निर्यात नहीं किया जाता है, इसलिए यह आपके मिक्सिन के लिए अनुपलब्ध है।

हालांकि इसके परिणाम हैं। जब आप एक invariant तोड़ते हैं, उदाहरण के लिए, देव मोड ReactJS आपको गलत क्या हुआ है इसका एक अच्छा विवरण देगा। उत्पादन मोड में, यह आपको एक सामान्य त्रुटि देगा जो आपको dev संस्करण का उपयोग करने के लिए कहता है।

हम इस का उपयोग कर सकते एक समारोह जो निर्धारित करता है कि प्रतिक्रिया का निर्माण करने के देव मोड में है:

function isDevReact() { 
    try { 
    React.createClass({}); 
    } catch(e) { 
    if (e.message.indexOf('render') >= 0) { 
     return true; // A nice, specific error message 
    } else { 
     return false; // A generic error message 
    } 
    } 
    return false; // should never happen, but play it safe. 
}; 

यह काम करता है क्योंकि एक render विधि को लागू नहीं करने के लिए अपवाद अलग है दो मोड में:

Development: "Invariant Violation: createClass(...): Class specification must implement a `render` method. Inline JSX script:16" 
Production: "Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings. Inline JSX script:16" 

शब्द "रेंडर" हम जिस आविष्कार का उल्लंघन करते हैं, उसके लिए विशिष्ट है, इसलिए यह केवल dev संस्करण के अपवाद में दिखाई देता है।

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

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