2016-01-07 15 views
12

Sto lavorando a un progetto di risposta (il mio primo) e di recente ho ristrutturato la struttura delle cartelle per dare un po 'più senso.È possibile eseguire più importazioni di classe con ES6/Babel?

per rendere la mia vita più facile, nelle mie cartelle componenti, Ho un file index.js che si presenta come il seguente:

export * from './App'; 
export * from './Home'; 
export * from './PageWrapper'; 

(L'idea è stata sollevata da un altro StackOverflow Question)

In questo caso ogni dei file questo indice punta ad avere un'esportazione di classe singolare.

Ora nella mia applicazione principale, ho cercare di fare qualcosa di simile:

import {Home, App} from './containers/index'; 
//or 
import Home from './containers/index'; 

Niente funziona. Ho scoperto che se li separo tutti in singole linee che puntano direttamente al file corretto, funziona.

import Home from './containers/Home'; 
import App from './containers/App'; 

Quindi è possibile importare più classi nel modo in cui lo sto facendo e io non lo vedo? Devo forse nominarli tutti (App as App)? O è semplicemente una limitazione imposta?

+2

ci mostri uno dei App.js, Home.js o PageWrapper.js (linea di esportazione) ? – mostruash

risposta

16

È possibile esportare in questo modo:

import App from './App'; 
import Home from './Home'; 
import PageWrapper from './PageWrapper'; 

export { 
    App, 
    Home, 
    PageWrapper 
} 

Quindi, è possibile importare come questo ovunque ne abbiate bisogno:

import { App, PageWrapper } from './index' //or similar filename 

... 

Si può leggere di più su import e export qui. Ho anche risposto a una domanda simile here.

+0

Grazie! Questo è esattamente ciò di cui avevo bisogno. – cdutson

+0

Nessun problema. A proposito, se esporti i tuoi componenti in un 'index.js', puoi facilmente importarli senza targeting esplicito del file. Ad esempio, hai una cartella 'components', lì hai' Home.jsx', 'App.jsx' e' index.js'. Ovunque tu importi, scegli come target 'componenti' come questo' import {Home, App} da './components'; ' –

2

Io uso l'esportazione che assomiglia a qualcosa del genere. Nel reagire ha funzionato bene

export {default as PublicRoute} from './PublicRoute'; 
export {default as PrivateRoute} from './PrivateRoute'; 

Quindi, è possibile importare in questo modo, ovunque è necessario:

import {PublicRoute, PrivateRoute} from './config/router'; 
... 
+0

ma la risposta sopra (@ mario) è un modo più pulito e chiaro per farlo suppongo, comunque buona alternativa:) –

+0

Grazie al supporto di @PardeepJain. Io uso la tua soluzione anche in alcuni casi. L'ho applicato nella configurazione dello strumento di creazione con il mio codice server nodejs. Quando utilizzo la mia soluzione, il plugin ** gulp-strip-debug ** genera un errore di token imprevisto. Ho dovuto riutilizzare la soluzione proprio come quella di (@ Mario) e mi hai proposto come soluzione sostitutiva. E i risultati del mio strumento di costruzione non sono interrotti :)! – manhnguyen

Problemi correlati