与通天塔 react 。我对import和module.exports感到困惑。我假设babel在将ES6代码转换为ES5时分别将导入和导出分别转换为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");
我将babel与预设es2015一起使用进行了编译。这给我以下错误
但是,如果我删除了
module.exports = Tiger;
并将其替换为export { Tiger };
,它可以正常工作。我在这里想念什么?
编辑:
我正在使用browserify作为模块 bundle 器。
最佳答案
export { Tiger }
等同于module.exports.Tiger = Tiger
。
相反,module.exports = Tiger
等效于export default Tiger
。
因此,当您使用module.exports = Tiger
然后尝试import { Tiger } from './animals'
时,您实际上是在要求Tiger.Tiger
。