2015-12-01 9 views
5

Sto usando babel/ES6 con il webpack. Sto importando lo stesso file 'actions' - che esporta un mazzo di funzioni - in due posti diversi. A un certo punto si ritorna un modulo, l'altro undefined:Quando si utilizza ES6, in che modo una funzione importata può essere indefinita in un file e non in un altro?

actions.js

export function test() { ... } 
export function test2() { ... } 

App.js

import actions from './actions' 
class App extends React.Component { ... } 
console.log(actions);   //<-------- Object{test:function,test2:function) 
export default connect((state) => { ... },actions)(App); 

modificare la ragione App.js lavorato era perché era in realtà usando import * as actions come suggerito sotto, l'ho appena riportato di nuovo sbagliato nell'esempio

NestedComponent.js

import actions from './actions' 
class NestedComponent extends OtherComponent { ... } 
console.log(actions);   //<-------- logs undefined 
export default connect((state) => { ... },actions)(NestedComponent); 

È correlato all'ordine in cui webpack definisce i moduli/file?

+1

Sei sicuro che le azioni siano presenti nella stessa directory di NestedComponent? –

+0

no in realtà è in una cartella nidificata nella mia configurazione, ma ho ricontrollato il percorso, e sia l'editor che il compilatore babel si lamentano se lo cambio (il che significa che era buono) – Flion

+0

@Felix King ha ragione. Dal momento che non si utilizzano le esportazioni predefinite nel file delle azioni, non si è in grado di importare nulla da esso, a meno che non si sia utilizzata un'importazione con nome. –

risposta

10

Questo non dovrebbe funzionare in entrambi i casi perché si stanno importando valori errati. import foo from '...' importa l'esportazione predefinita del modulo, ma non si dispone di un'esportazione predefinita, si hanno solo esportazioni con nome.

Che cosa si dovrebbe usare è

import {test, test2} from './actions'; 
// or 
import * as actions from './actions'; 
+1

Ah sì hai ragione, quello era il problema. Io uso '' 'import * come azioni da './Actions'''' now e funziona perfettamente. tnx! – Flion

0

Un altro caso comune in cui questo accade è che se si sta testando con Jest e il comportamento auto-beffardo è abilitata. Molto dolore, come questo.

10

Mi sono imbattuto in un problema simile, causato da dipendenze circolari. Ho cercato di importare una costante nel file 'A' dal file 'B' che a sua volta ha cercato di importare dal file 'A'.

+0

Questo ha risolto il mio problema. Grazie! –