什么是_interopRequireDefault?

Web*_*man 7 javascript export ecmascript-6

我在这个网站上看到了一个解释:

_interopRequireDefault():按原样使用ES6 CommonJS模块(如果它具有默认导出,则它具有名为default的属性).普通的CommonJS模块成为属性默认值.换句话说,在后一种情况下,模块的导出成为默认导出.

在代码中,通常有几个_interopRequireDefault写入.

所以如果我理解得很好,因为默认导出是一堆键/值,整个文件导出为一个总实体,_interopRequireDefault允许选择哪些模块将输入默认导出的特定代码呢?

Nis*_*ant 12

允许代码使用为nodejs和ES6编写的模块.

方法模块在ES6和CJS(Common JS规范)中的工作导出之间存在差异.

Common JS中的模块:

module.exports = function () {};
Run Code Online (Sandbox Code Playgroud)

ES6中的模块:

export default function () {}
Run Code Online (Sandbox Code Playgroud)

_interopRequireDefault有一个相当简单的逻辑:

function _interopRequireDefault(module) {
  const
      isCJSModule = module && module.__esModule,
      cjsStyedModule = { default: module };

  return isCJSModule ? module: cjsStyedModule;
}
Run Code Online (Sandbox Code Playgroud)

CJS在ES6之前就存在了.Node仍然使用CJS版本和最初为nodejs编写的所有模块.

虽然nodejs现在通过实验支持ES6模块,但如果使用--experimental标志和名称模块文件作为.mjs运行.