与巴贝尔发生反应.我对import和module.exports感到困惑.在将ES6代码转换为ES5时,我假设babel将导入和导出分别转换为require和module.exports.
如果我从一个模块导出一个函数并在另一个模块中导入该函数,代码执行正常.但是如果我使用module.exports导出函数并使用"import"导入,则会在运行时抛出错误,表示它不是函数.
我做了一个例子.
// Tiger.js function Tiger() { function roar(terrian){ console.log('Hey i am in ' + terrian + ' and i am roaing'); }; return roar; } module.exports = Tiger; // animal.js import { Tiger } from './animals'; var animal = Tiger(); animal("jungle");
我使用预设es2015的babel进行反编译.这给了我以下错误
未捕获的TypeError:(0,_ animals.Tiger)不是函数
但是如果我删除它module.exports = Tiger;
并用它替换export { Tiger };
它工作正常.
我在这里失踪了什么?
编辑: 我使用browserify作为模块捆绑器.
export { Tiger }
相当于module.exports.Tiger = Tiger
.相反,module.exports = Tiger
相当于export default Tiger
.因此,当您使用module.exports = Tiger
然后尝试import { Tiger } from './animals'
有效地要求时Tiger.Tiger
.
如果您想导入:
module.exports = Tiger
你可以使用以下结构:
import * as Tiger from './animals'
然后它会工作.
另一种选择是改变@Matt Molnar所描述的导出,但只有你是导入代码的作者才有可能.