ES6重新导出的值包含在Getter

时间:2016-04-08 22:19:21

标签: javascript module ecmascript-6 babeljs

有人可以向我解释一下吗?我们说我有这两个模块:

// 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来编译代码。

感谢您的任何解释!

1 个答案:

答案 0 :(得分:4)

Babel正在努力正确实施reference binding of module imports。你可以look at the compiled output

输入:

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];
    }
  });
});