如何执行与ES5和ES6兼容的导出?

时间:2015-05-14 15:52:31

标签: javascript ecmascript-6 ecmascript-5

我正在写一个"班级"在节点

// mymodule/index.js

function MyClass() {}
MyClass.prototype.method1 = function() {..}
通常我做

module.exports = MyClass

但我希望我的课程可用于语法

var MyClass = require('mymodule')

import {MyClass} from 'mymodule'

这是正确的方法吗?

3 个答案:

答案 0 :(得分:11)

至于编写兼容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

答案 1 :(得分:3)

两种方式都是正确的,但尝试在不使用括号的情况下导入es6:

import MyClass from 'mymodule'

否则你必须像这样导出你的函数:

module.exports.MyClass = MyClass

而不是像这样导入它:

import { MyClass } from 'mymodule'

答案 2 :(得分:0)

从评论中,我了解到您正在尝试在节点中的某些mocha单元测试中运行ES6前端代码。是的,在节点支持ES6模块之前,您无法做到这一点。如果我是你,我会使用systemjs来加载那些mocha测试的代码。 Mocha支持promises,因此在测试之前加载任何文件应该相当轻松。

为两者编写语法只会给你带来更多问题。