2016-04-08 13 views
2

誰かがこれを私に説明できますか?ES6の再エクスポートされた値がゲッターにラップされます

// 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] } 

なぜmodule2FuncGetterにラップされていますか?それは構文がそれを行うexport fromですか?すべての機能が期待通りに機能します。私は、トランスバータコードにBabel 6を使用しています。

ありがとうございました!

+0

バベルのは、モジュールのインポートのライブバインディングを実装するためにやって可能性があります。 –

+0

は、moduleOneの一番上でインポートする必要がありますか? – JordanHendrix

+0

'import * as final'を使うときは' final'を参照する必要がありますので、 'final.module2Func'のようにしてください。これをしたくなければ: ' import {module1Func、module2Func} from '。/moduleOne'': http://www.2ality.com/2014/09/es6-modules-final.html – JordanHendrix

答えて

3

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]; 
    } 
    }); 
}); 
関連する問題