2015-05-14 3 views
18

Ich bin eine "Klasse" in Knoten SchreibenWie führe ich einen Export durch, der mit ES5 und ES6 kompatibel ist?

// mymodule/index.js 

function MyClass() {} 
MyClass.prototype.method1 = function() {..} 

in der Regel mache ich

module.exports = MyClass 

aber ich möchte, dass meine Klasse für beide Syntax verfügbar

var MyClass = require('mymodule') 

und

import {MyClass} from 'mymodule' 

Was ist der richtige Weg?

+0

einen Blick auf, wie Babel diese Ansätze: http://babeljs.io/docs/usage/modules/# interop – Wildhoney

+2

Warum willst du 'import {MyClass} von' mymodule '' statt 'myClass von' mymodule 'importieren? 'var MyClass = require ('mymodule')' ist äquivalent zu 'import MyClass von 'mymodule' 'und' import {MyClass} von' mymodule '' ist äquivalent zu 'var MyClass = require ('meinmodul'). MyClass'. Während Sie sicherlich erreichen können, was Sie wollen, ist die Frage, ob es Sinn macht. –

+2

Wahrscheinlich meinen Sie, wie Sie einen Export ausführen, der sowohl mit CommonJS als auch mit der Harmony von ES6 kompatibel ist. –

Antwort

0

Aus den Kommentaren verstehe ich, dass Sie versuchen, Ihren ES6-Frontend-Code in einigen Mocha-Unit-Tests in Knoten auszuführen. Ja, das geht erst, wenn Knoten ES6-Module unterstützen. Wenn ich Sie wäre, würde ich systemjs verwenden, um Code für diese Mokka-Tests zu laden. Mocha unterstützt verspricht, so sollte es ziemlich schmerzlos sein, alle Dateien vor den Tests zu laden.

Schreiben Syntax für beide wird nur mehr Probleme für Sie erstellen.

0

Beide Wege sind richtig, aber versuchen, in es6 wie dies ohne die Klammern zu importieren:

import MyClass from 'mymodule' 

Andernfalls würden Sie Ihre Funktion wie diese exportieren müssen:

module.exports.MyClass = MyClass 

und als sie importieren wie folgt:

import { MyClass } from 'mymodule' 
+3

Dies ist nicht kompatibel mit es5, was OP verlangt. – Jim

+0

@Jim Die Frage war, wie man es5 mit es6 kompatibel machen kann. Meine Antwort zeigt nur einen Fehler im Code und wie Sie es beheben. Dies ist nicht nur es6-Code, Listing 2 erklärt, wie man den es5-Code einstellt, während Listing 1 erklärt, wie man den es6-Code einstellt, um das ganze Problem zu beheben. –

4

Soweit schreiben einen Export, der für beide ES5 und ES6 kompatibel ist, Bab el kümmert sich schon darum für dich. (Wie in den Kommentaren zu Ihrer Frage mitgeteilt. Ich Klärung nur für diejenigen, die im Dialog verloren gegangen.)

module.exports = MyClass 

arbeitet sowohl mit var MyClass = require('mymodule') und import MyClass from 'mymodule

, jedoch klar zu sein, die tatsächliche Syntax fragte Sie:

import {MyClass} from 'mymodule' 

bedeutet etwas anderes

import MyClass from 'mymodule' 

Für letztere würden Sie es als exportieren haben: module.exports.MyClass = MyClass und für ES5 Module müßte es erforderlich als var MyClass = require('mymodule').MyClass

Verwandte Themen