ES6重新导出的值被封装到Getter中

ES6 re-exported values are wrapped into Getter

本文关键字:封装 Getter 新导出 ES6      更新时间:2024-03-29

有人能给我解释一下吗?假设我有这两个模块:

// moduleTwo.js
export const module2Func = () => {
  return 2
}

// moduleOne.js
export * from './moduleTwo'
export const module1Func = () => {
  return 1
}

然后我在某个地方导入moduleOne

import * as final from './moduleOne'
console.log(final) 

然后最终结果变成这样:

{ module2Func: [Getter], module1Func: [Function: module1Func] }

为什么module2Func被包裹成Getter?语法做到这一点的是export from吗?所有功能均按预期工作。我正在使用Babel 6来编译代码。

谢谢你的任何解释!

这是Babel为正确实现模块导入的引用绑定所做的工作。您可以查看编译后的输出。

输入:

export * from 'foo';

输出:

'use strict';
Object.defineProperty(exports, "__esModule", {
  value: true
});
var _foo = require('foo');
Object.keys(_foo).forEach(function (key) {
  if (key === "default") return;
  Object.defineProperty(exports, key, {
    enumerable: true,
    get: function get() {
      return _foo[key];
    }
  });
});