Подтвердить что ты не робот

Как выполнить экспорт, совместимый с ES5 и ES6?

Я пишу "класс" в node

// mymodule/index.js

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

обычно я делаю

module.exports = MyClass

но я хочу, чтобы мой класс был доступен для синтаксиса

var MyClass = require('mymodule')

и

import {MyClass} from 'mymodule'

Каков правильный способ сделать это?

4b9b3361

Ответ 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'