2016-07-12 43 views
42

Próbuję utworzyć moduł, który eksportuje wiele klas ES6. Załóżmy, że mam następującą strukturę katalogów:Eksportowanie wielu klas w modułach ES6

my/ 
└── module/ 
    ├── Foo.js 
    ├── Bar.js 
    └── index.js 

Foo.js i Bar.js każdy eksportu domyślną klasę ES6:

// Foo.js 
export default class Foo { 
    // class definition 
} 

// Bar.js 
export default class Bar { 
    // class definition 
} 

Obecnie mam mój index.js skonfigurować tak:

import Foo from './Foo'; 
import Bar from './Bar'; 

export default { 
    Foo, 
    Bar, 
} 

Nie mogę jednak importować. Chcę być w stanie to zrobić, ale nie znajdują się zajęcia:

import {Foo, Bar} from 'my/module'; 

Co to jest poprawny sposób eksportować wiele klas w module ES6?

+1

wystarczy użyć 'export' bez domyślnie – webdeb

+0

Można mieć tylko jedno' default' eksport. Wyobraź sobie, że ktoś próbował zrobić 'import SomeClass z 'my/module''. To automatycznie zaimportuje moduł 'default' z tej ścieżki. Gdybyś miał tam wiele domyślnych eksportów, skąd wiedziałby, który importować? – saadq

Odpowiedz

81

Spróbuj to w kodzie:

import Foo from './Foo'; 
import Bar from './Bar'; 

export { // without default 
    Foo, 
    Bar, 
} 

Btw, można też zrobić to w ten sposób:

//bundle.js 
export Foo from './Foo' 
export Bar from './Bar' 

//and import somewhere.. 
import { Foo, Bar } from './bundle' 

Korzystanie export

export const MyFunction =() => {} 
export const MyFunction2 =() => {} 

const Var = 1; 
const Var2 = 2; 
export { 
    Var, Var2 
} 


// Then import it this way 
import {MyFunction, MyFunction2, Var, Var2 } from './foo-bar-baz'; 

różnicy do export default

jest to, że można eksportować coś i zastosować nazwę gdzie go zaimportować

// export default 
const Func =() {} 
export default Func; 

// import it 
import Foo from './func' 
+0

Otrzymuję błąd "nieoczekiwanego tokenu" podczas budowania 'export Foo from './Foo'; export bar from './Bar'' – inostia

+0

@inostia uwaga, to jest składnia ES6, prawdopodobnie potrzebujesz "babel" aby ją obsłużyć – webdeb

+0

Używam babel. Ten błąd wystąpił podczas kompilacji z pakietem internetowym. Myślę, że muszę zrobić coś takiego jak 'export {default as Foo} from './Foo';'. Widziałem to gdzie indziej – inostia

6

nadzieję, że to pomaga:

// Export (file name: my-functions.js) 
export const MyFunction1 =() => {} 
export const MyFunction2 =() => {} 
export const MyFunction3 =() => {} 

// Import 
import * as myFns from "./my-functions"; 

myFns.MyFunction1(); 
myFns.MyFunction2(); 
myFns.MyFunction3(); 
0

@ odpowiedź webdeb za nie działa dla mnie, uderzę błąd unexpected token podczas kompilowania ES6 z Babel, wykonując eksport nazwany.

ten pracował dla mnie, ale:

// Foo.js 
export default Foo 
... 

// bundle.js 
export { default as Foo } from './Foo' 
export { default as Bar } from './Bar' 
... 

// and import somewhere.. 
import { Foo, Bar } from './bundle'