当前位置:  开发笔记 > 编程语言 > 正文

export default vs module.exports差异

如何解决《exportdefaultvsmodule.exports差异》经验,为你挑选了1个好方法。

这有效:

import {bar} from './foo';
bar();

// foo.js
module.exports = {
 bar() {}
}

这有效:

import foo from './foo';
foo.bar();

// foo.js
export default {
 bar() {}
}

那么为什么这不起作用呢?

import {bar} from './foo';
bar();

// foo.js
export default {
 bar() {}
}

它抛出TypeError: (0 , _foo.bar) is not a function.



1> Nelson Yeung..:

当你有

export default {
  bar() {}
}

导出的实际对象具有以下形式:

exports: {
  default: {
    bar() {}
  }
}

当您进行简单导入(例如import foo from './foo';)时,您实际上是在导入中获取默认对象(即,exports.default).当你运行babel编译到ES5时,这将变得很明显.

当您尝试导入特定功能(例如,import { bar } from './foo';)时,根据您的情况,您实际上是尝试获取exports.bar而不是exports.default.bar.因此bar函数未定义的原因.

当您只有多个导出时:

export function foo() {};
export function bar() {};

你最终会有这个对象:

exports: {
  foo() {},
  bar() {}
}

因此import { bar } from './foo';会起作用.这是类似的情况,module.exports您基本上存储如上所述的导出对象.因此,您可以导入条形函数.

我希望这很清楚.


很棒的解释.谢谢!
推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有