2015-05-14 20 views
18

Piszę "klasa" w węźleJak wykonać eksport zgodny z ES5 i ES6?

// mymodule/index.js 

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

zwykle robię

module.exports = MyClass 

ale chcę, moja klasa dostępna zarówno dla składni

var MyClass = require('mymodule') 

i

import {MyClass} from 'mymodule' 

Który jest prawidłowy sposób to zrobić?

+0

Spójrz na to w jaki sposób podejść Babel: http://babeljs.io/docs/usage/modules/# interop – Wildhoney

+2

Dlaczego chcesz 'import {MyClass} z 'mymodule'' zamiast' import MyClass z' mymodule''? 'var MyClass = require ('mymodule')' jest równoważne 'importowi MyClass z 'mymodule'' i' import {MyClass} z' mymodule'' jest równoważne 'var MyClass = require ('mymodule'). Chociaż na pewno możesz osiągnąć to, czego chcesz, pytanie brzmi, czy ma to sens. –

+2

Prawdopodobnie masz na myśli sposób na eksport, który jest kompatybilny z Harmony CommonJS i ES6. –

Odpowiedz

0

Z komentarzy, rozumiem, że próbujesz uruchomić swój kod frontowy ES6 w niektórych testach jednostkowych mokka w węźle. Tak, nie możesz tego zrobić, dopóki moduły ES6 nie obsługują węzła. Gdybym był tobą, użyłbym systemjs do załadowania kodu dla tych testów mokka. Mocha wspiera obietnice, więc ładowanie plików przed testami powinno być dość bezbolesne.

Pisanie składni obu sprawi po prostu więcej problemów.

0

Oba sposoby są poprawne, ale próby importowania w ES6 jak ten bez nawiasów:

import MyClass from 'mymodule' 

W przeciwnym razie trzeba by eksportować swoją funkcję tak:

module.exports.MyClass = MyClass 

i niż import tak:

import { MyClass } from 'mymodule' 
+3

To nie jest kompatybilne z es5, o to pyta OP. – Jim

+0

@Jim Pytanie, jak sprawić, by es5 było kompatybilne z es6. Moja odpowiedź wskazuje tylko na błąd w kodzie i jak to naprawić. To nie jest tylko kod es6, listing 2 wyjaśnia, w jaki sposób dostosować kod es5, a listing 1 mówi, jak dostosować kod es6, aby naprawić cały problem. –

4

Jeśli chodzi o pisanie eksportu, który jest kompatybilny zarówno z ES5, jak i ES6, Bab el już o to troszczy się. (Jak przekazywane w komentarzach do Twojego pytania. Ja wyjaśnienia tylko dla tych, którzy zabłądził w oknie dialogowym.)

module.exports = MyClass 

będzie działać zarówno z var MyClass = require('mymodule') i import MyClass from 'mymodule

Jednakże, aby być jasne, rzeczywista składnia pytasz o:

import {MyClass} from 'mymodule' 

oznacza coś innego niż

import MyClass from 'mymodule' 

W tym drugim przypadku trzeba by go eksportować jako: module.exports.MyClass = MyClass, a dla modułów ES5 musiałby wymagane var MyClass = require('mymodule').MyClass

Powiązane problemy