与通天塔 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

10-06 02:38