javascript - support - ¿Cómo realizo una exportación que sea compatible con ES5 y ES6?
ecmascript 7 (3)
Estoy escribiendo una "clase" en el nodo
// mymodule/index.js
function MyClass() {}
MyClass.prototype.method1 = function() {..}
normalmente lo hago
module.exports = MyClass
pero quiero que mi clase esté disponible para ambas sintaxis
var MyClass = require(''mymodule'')
y
import {MyClass} from ''mymodule''
¿Cuál es la forma correcta de hacerlo?
Ambas formas son correctas, pero intente importar en es6 de esta manera sin los corchetes:
import MyClass from ''mymodule''
De lo contrario tendrías que exportar tu función así:
module.exports.MyClass = MyClass
Y luego importarlo así:
import { MyClass } from ''mymodule''
En cuanto a escribir una exportación que sea compatible con ES5 y ES6, Babel ya se encarga de eso por usted. (Como se comunicó en los comentarios a su pregunta. Solo estoy aclarando para aquellos que se perdieron en el diálogo).
module.exports = MyClass
trabajará con ambos var MyClass = require(''mymodule'')
e import MyClass from ''mymodule
Sin embargo, para ser claros, la sintaxis real que usted preguntó sobre:
import {MyClass} from ''mymodule''
significa algo diferente de
import MyClass from ''mymodule''
Para este último, tendría que exportarlo como: module.exports.MyClass = MyClass
, y para los módulos ES5 tendría que ser requerido como var MyClass = require(''mymodule'').MyClass
Por los comentarios, entiendo que está intentando ejecutar su código de frontend ES6 en algunas pruebas de unidades mocha en el nodo. Sí, no puedes hacer eso hasta que los nodos soportan los módulos ES6. Si yo fuera usted, usaría systemjs para cargar código para esas pruebas de mocha. Mocha admite promesas, por lo que debería ser bastante sencillo cargar cualquier archivo antes de las pruebas.
Escribir la sintaxis para ambos creará más problemas para ti.