我正在写一个"班级"在节点
// mymodule/index.js
function MyClass() {}
MyClass.prototype.method1 = function() {..}
通常我做
module.exports = MyClass
但我希望我的课程可用于语法
var MyClass = require('mymodule')
和
import {MyClass} from 'mymodule'
这是正确的方法吗?
答案 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,因此在测试之前加载任何文件应该相当轻松。
为两者编写语法只会给你带来更多问题。