Как выполнить экспорт, совместимый с ES5 и ES6?
Я пишу "класс" в node
// mymodule/index.js
function MyClass() {}
MyClass.prototype.method1 = function() {..}
обычно я делаю
module.exports = MyClass
но я хочу, чтобы мой класс был доступен для синтаксиса
var MyClass = require('mymodule')
и
import {MyClass} from 'mymodule'
Каков правильный способ сделать это?
Ответы
Ответ 1
Что касается написания экспорта, совместимого как с ES5, так и с ES6, Babel уже позаботится об этом для вас. (Как сообщается в комментариях к вашему вопросу. Я только уточняю для тех, кто заблудился в диалоговом окне.)
module.exports = MyClass
будет работать как с var MyClass = require('mymodule')
, так и с import MyClass from 'mymodule
Однако, чтобы быть ясным, фактический синтаксис, о котором вы спрашивали:
import {MyClass} from 'mymodule'
означает что-то отличное от
import MyClass from 'mymodule'
Для последнего вам нужно будет экспортировать его как: module.exports.MyClass = MyClass
, а для модулей ES5 это потребуется как var MyClass = require('mymodule').MyClass
Ответ 2
Из комментариев я понимаю, что вы пытаетесь запустить свой код интерфейса ES6 в некоторых модульных тестах мокко в node. Да, вы не можете этого сделать до тех пор, пока node не поддержите модули ES6. Если бы я был вами, я бы использовал systemjs, чтобы загрузить код для этих мокко-тестов.
Mocha поддерживает promises, поэтому перед тестированием должно быть довольно безболезненно загружать файлы.
Синтаксис написания для обоих будет просто создавать больше проблем для вас.
Ответ 3
Оба способа правильные, но попробуйте импортировать в es6, как это, без скобок:
import MyClass from 'mymodule'
В противном случае вам придется экспортировать вашу функцию следующим образом:
module.exports.MyClass = MyClass
и импортировать его следующим образом:
import { MyClass } from 'mymodule'