2015-12-03 14 views
85

मैं वर्तमान में वेबपैक/बाइबल के माध्यम से एक प्रतिक्रिया ऐप में ES6 का उपयोग कर रहा हूं। मैं मॉड्यूल के सभी घटकों को इकट्ठा करने और उन्हें निर्यात करने के लिए इंडेक्स फ़ाइलों का उपयोग कर रहा हूं। दुर्भाग्य से, कि इस तरह दिखता है:ईएस 6 इंडेक्स फ़ाइल में निर्यात/आयात

import Comp1_ from './Comp1.jsx'; 
import Comp2_ from './Comp2.jsx'; 
import Comp3_ from './Comp3.jsx'; 

export const Comp1 = Comp1_; 
export const Comp2 = Comp2_; 
export const Comp3 = Comp3_; 

तो मैं अच्छी तरह से इसे इस तरह अन्य स्थानों से आयात कर सकते हैं:

import { Comp1, Comp2, Comp3 } from './components'; 

जाहिर है कि एक बहुत अच्छा समाधान नहीं है, तो मैं सोच रहा था, अगर वहाँ कोई और तरीका था। मैं सीधे आयातित घटक निर्यात करने में सक्षम नहीं प्रतीत होता।

सादर

+0

[निर्देशिका में फ़ाइलों से आयात मॉड्यूल] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/29722270/import-modules-from-files-in-directory) –

उत्तर

164

आप आसानी से फिर से निर्यात कर सकते हैं डिफ़ॉल्ट आयात:

export {default as Comp1} from './Comp1.jsx'; 
export {default as Comp2} from './Comp2.jsx'; 
export {default as Comp3} from './Comp3.jsx'; 

वहाँ भी एक proposal for ES7 ES8 आप export Comp1 from '…'; लिख देंगे है।

+1

इसी तरह के पैटर्न भी देखें [यहां] (http://stackoverflow.com/a/32230064/1048572) और [यहां] (http://stackoverflow.com/q/ 2 9 722270/1048572) – Bergi

+4

ES8 प्रस्ताव के अतिरिक्त, आप इंडेक्स फ़ाइलों को बनाए रखने के लिए कोड जनरेशन का उपयोग कर सकते हैं। Https://github.com/gajus/create-index और https://github.com/ryardley/indexr पर एक नज़र डालें। – Gajus

+0

@ बर्गि तो ये 3 लाइनें आयात और निर्यात दोनों करती हैं? या यह सिर्फ निर्यात कर रहा है लेकिन अब आपको COMP1_ ​​नाम आदि के साथ परेशान करने की आवश्यकता नहीं है? – musicformellons

24

साथ ही, ध्यान भालू है कि अगर आप एक साथ कई कार्यों का निर्यात करने की जरूरत है, कार्रवाई की तरह आप

export * from './XThingActions'; 
+5

हां। अनजाने में यह _only_ निर्यात नाम लेता है, यानी इसमें डिफ़ॉल्ट निर्यात शामिल नहीं है। – ArneHugo

+0

बहुत बढ़िया! मेरे लिये कार्य करता है। – purezen

+0

मुझे एक (बहुत भ्रामक ... मुझे एक पल ले गया) 'सिंटेक्स त्रुटि: अप्रत्याशित आरक्षित शब्द', @ बर्गी का स्वीकार्य उत्तर काम करता है। –

15

बहुत देर हो गई उपयोग कर सकते हैं, लेकिन मैं जिस तरह से है कि मैं इसे सुलझाने साझा करना चाहते हैं।

model फ़ाइल जो दो निर्यात का नाम दिया है बीत रहा है:

export { Schema, Model }; 

और जो डिफ़ॉल्ट निर्यात है controller फ़ाइल होने:

export default Controller; 

मैं इस तरह से index फ़ाइल में उजागर:

import { Schema, Model } from './model'; 
import Controller from './controller'; 

export { Schema, Model, Controller }; 

और यह मानते हुए कि मैं अपमान चाहता हूं टी उन सभी को:

import { Schema, Model, Controller } from '../../path/'; 
+0

क्या यह कार्य करता है जब आप कोई फ़ंक्शन आयात करते हैं और फिर इसे वापस निर्यात करते हैं? मैंने कोशिश की लेकिन यह नहीं हुआ। –

+0

क्षमा करें यह वास्तव में काम करता था, मैं अपने रास्ते में गायब था। –

+0

बहुत बढ़िया! बहुत साफ और छोटा – Dmitriy

0

मैं export * साथ एक समस्या थी, यह undefined लौटे जब मैं डिफ़ॉल्ट समारोह/वर्ग आयात होगा ...

तो, मैं अंत में यहexport {default} from './MyClass' और इसके साथ तय साथ ही साथ

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