2015-12-10 10 views
18

मैंने पिछले परियोजना में बेबेल के साथ es2015 का उपयोग शुरू किया। जब मैं if स्थिति के अंदर import या export करने का प्रयास करता हूं, तो मुझे 'import' and 'export' may only appear at the top level त्रुटि होती है। मुझे इसके लिए बहुत सारे मामले दिखाई देते हैं और यह require के साथ अच्छा काम करता है, लेकिन es2015 मॉड्यूल के साथ नहीं। क्या इस सीमा के लिए कोई कारण है?es2015 में निर्यात/आयात घोषणा शीर्ष स्तर पर क्यों होनी चाहिए?

+2

क्योंकि es2015 मॉड्यूल सिंक्रनाइज़ रूप से लोड हो सकते हैं? नेस्टेड 'निर्यात की अनुमति देने का मतलब यह होगा कि निर्यात को तब तक स्थगित कर दिया जा सकता है जब तक उस लाइन को – CodingIntrigue

+0

बेबेल-एस्लिंट कहा जाता है। https://stackoverflow.com/questions/39158552/ignore-eslint-error-import-and-export-may-only-appear-at-the-top-level –

उत्तर

15

जावास्क्रिप्ट ईएस 6 मॉड्यूल पर स्थिर विश्लेषण करता है। इसका मतलब है कि आप गतिशील रूप से आयात या निर्यात नहीं कर सकते हैं। Read section 4.2 of this article for more information:

एक मॉड्यूल की संरचना स्थिर का मतलब है कि आप संकलन समय (स्थिर) पर आयात और निर्यात निर्धारित कर सकते हैं किया जा रहा है - आप केवल स्रोत कोड को देखने के लिए है, तो आप इसे निष्पादित करने के लिए नहीं है।

वहाँ स्थिर, analysable अर्थात् मैक्रो और प्रकार (में चर्चा होने की जिनमें से कुछ भविष्य सुविधाओं है कि एक स्रोत फ़ाइल के लिए की क्षमता पर भरोसा करते हैं के लिए जावास्क्रिप्ट तैयार करने के लिए कर रहे हैं इस दृष्टिकोण के लिए कई कारण हैं, उपरोक्त आलेख)।

एक और दिलचस्प article on this topicचक्रीय निर्भरता और तेजी से लुकअप कारण के रूप में उल्लेख है।

______

आप एक मॉड्यूल में से कुछ नेस्टेड ब्लॉक के भीतर एक export प्रदर्शन करने के लिए चाहते हैं, पर फिर से विचार कैसे आप मॉड्यूल लेखन और अपने APIs/आंतरिक उजागर के रूप में यह लगभग निश्चित रूप से आवश्यक नहीं है कर रहे हैं। वही है यदि आप वर्तमान में require आईएन 5 कोड में नेस्टेड ब्लॉक के भीतर मॉड्यूल हैं। अपने मॉड्यूल के शीर्ष पर require/import क्यों नहीं और ने अपने एपीआई/इंटर्नल्स को नेस्टेड ब्लॉक के भीतर उपभोग किया है? कम से कम एक पठनीयता दृष्टिकोण से, इस दृष्टिकोण का मुख्य लाभ यह है कि आप require कॉल के लिए अपने स्रोत को स्कैन किए बिना मॉड्यूल की निर्भरताओं को जान सकते हैं।

+3

केवल इतना ही नहीं, लेकिन मॉड्यूल निर्भरताओं के बाद वे अवधारणात्मक रूप से फंसे हुए हैं आपके किसी भी कोड को निष्पादित करने से पहले पूरी तरह से संसाधित किया जाता है, और 'if' में आयात करने की अवधारणा को निष्पादन की आवश्यकता होगी। – loganfsmyth

+0

@loganfsmyth यह डालने का एक और अधिक संक्षिप्त तरीका है :-) – sdgluck

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