[英]How do I perform an export that is compatible with ES5 and ES6?
我正在节点中写一个“类”
// mymodule/index.js
function MyClass() {}
MyClass.prototype.method1 = function() {..}
通常我做
module.exports = MyClass
但我希望我的课程可用于两种语法
var MyClass = require('mymodule')
和
import {MyClass} from 'mymodule'
这是正确的方法吗?
对于编写兼容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
两种方式都是正确的,但尝试在没有括号的情况下导入es6这样:
import MyClass from 'mymodule'
否则你必须像这样导出你的函数:
module.exports.MyClass = MyClass
而不是像这样导入:
import { MyClass } from 'mymodule'
从评论中,我了解到您正在尝试在节点中的某些mocha单元测试中运行ES6前端代码。 是的,在节点支持ES6模块之前,您无法做到这一点。 如果我是你,我会使用systemjs为那些mocha测试加载代码。 Mocha支持promises,因此在测试之前加载任何文件应该相当轻松。
为两者编写语法只会为您创造更多问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.