2016-07-12 17 views
42

Ich versuche ein Modul zu erstellen, das mehrere ES6-Klassen exportiert. Lassen Sie uns sagen, dass ich die folgende Verzeichnisstruktur haben:Mehrere Klassen in ES6-Modulen exportieren

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

Foo.js und Bar.js jeweils exportieren Sie eine Standard-ES6 Klasse:

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

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

ich zur Zeit meine haben index.js wie folgt aufgebaut:

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

export default { 
    Foo, 
    Bar, 
} 

Ich kann jedoch nicht importieren. Ich möchte in der Lage sein, dies zu tun, aber die Klassen sind nicht gefunden:

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

Was ist der richtige Weg, um mehrere Klassen in einem ES6 Modul zu exportieren?

+1

verwenden 'export' nur ohne den Standard – webdeb

+0

Sie nur einen' default' Export haben kann. Stellen Sie sich vor, jemand hätte versucht, SomeClass aus 'my/module' zu importieren. Dies würde automatisch das 'Standard'-Modul von diesem Pfad importieren. Wenn Sie mehrere Standardexporte dort hatten, wie würde es wissen, welches zu importieren? – saadq

Antwort

81

Versuchen Sie dies in Ihrem Code:

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

export { // without default 
    Foo, 
    Bar, 
} 

Btw, Sie können auch es auf diese Weise tun:

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

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

Mit 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'; 

Der Unterschied zu export default

ist, dass Sie etwas exportieren können, und den Namen anwenden, wo Sie es

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

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

Ich erhalte einen 'Unexpected Token' Fehler beim Erstellen von' Export Foo from './Foo'; export Bar aus './Bar'' – inostia

+0

@inostia Hinweis, das ist ES6 Syntax, wahrscheinlich brauchen Sie "Babel", um es zu unterstützen – webdeb

+0

Ich benutze Babel. Ich habe diesen Fehler beim Kompilieren mit Webpack bekommen. Ich denke, ich muss etwas wie 'export {default as Foo} von './Foo';'. Ich habe das anderswo gesehen – inostia

6

Hoffnung importieren, das hilft:

// 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

@ Antwort des webdeb nicht für mich arbeiten, ich traf einen unexpected token Fehler wenn ES6 mit Babel kompiliert wird, benannte Standardexporte.

Das ist für mich gearbeitet, aber:

// 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'