2016-02-16 11 views
30

ho notato un paio di casi in cui ho visto qualcosa di simile al seguente:javascript importazione da '/ cartella' con index.js

// /reducers/reducer1.js 
 
export default function reducer1(state = {}, action){ 
 
    // etc... 
 
} 
 
    
 
// /reducers/reducer2.js 
 
export default function reducer2(state = {}, action){ 
 
    // etc... 
 
} 
 

 
// /reducers/index.js 
 
import { combineReducers } from 'redux'; 
 
import reducer1 from './reducer1'; 
 
import reducer2 from './reducer2'; 
 

 
export default combineReducers({ 
 
    reducer1, 
 
    reducer2 
 
}) 
 
    
 
// /store.js 
 
import masterReducer from './reducers'; 
 

 
export default function makeStore(){ 
 
    // etc... 
 
}

Avviso l'ultimo "file" dove chiamiamo import masterReducer from './reducers' - Alcune persone sembrano ritenere che ciò dovrebbe importare lo default export dal file index.js.

E 'questa parte delle specifiche? - La mia interpretazione/domanda è che questo è il risultato di molte persone che usano WebPack v1 che traduce le dichiarazioni import in dichiarazioni requires in stile CommonJS? O si interromperà in WebPack v2 con il supporto "ufficiale" import/export?

+0

Con webpack non ne sono sicuro, ma se si usa babel, è necessario eseguire la trascrizione per richiedere le affermazioni –

+0

@SterlingArcher nome fantastico (uno dei miei programmi preferiti) - sei sicuro che sia il caso se usi [babel-preset -es2015-native-modules package] (https://github.com/araphel/babel-preset-es2015-native-modules) (preimpostato è 'es2015-native-modules' - quello consigliato che si usa per ottenere supporto per tree shaking w/'import' statement con WebPack 2)? – Jordan

+0

Non è compilato, ma puoi vedere vari metodi di esportazione/importazione nel mio [repository dei giochi] (https://github.com/RUJodan/SourceUndead). Sto ancora imparando a trascrivermi –

risposta

39

È questa parte delle specifiche?

No. Come identificatori di modulo ('./reducers' nel tuo caso) sono risolti ai moduli effettivi è lasciata alla implementazione del modulo caricatore/bundler, non è specificed da ES6. E non sembra essere specificato in CommonJs neanche.

Questo è il modo in cui il nodo lo fa: quando si richiede una directory, verrà utilizzato il file index.js. Bundle come browserify o webpack hanno seguito questa convenzione (per ragioni compat).

+1

Ah, credo di aver frainteso la domanda (avrei dovuto davvero guardare il titolo). fwiw, il webpack può essere configurato per la risoluzione in altri file rispetto a 'index.js'. –

+0

@FelixKling: Ah, non l'ho nemmeno guardato. Hai un link, non ho trovato quella configurazione? – Bergi

+0

Hmm, dopo aver guardato di nuovo, credo che arriverà nel webpack 2.0, non nella versione attuale. –

Problemi correlati