2016-01-12 14 views
5

モジュール全体を再エクスポートし、再エクスポートされたモジュールの特定の機能のみをオーバーライドします。しかし、同じ関数が既にre-reportportされているとき、オーバーライド関数のエクスポートは処理されないようです。es2015モジュールを再エクスポートし、再エクスポートされたモジュールの単一のエクスポート機能をオーバーライドします

http://www.ecma-international.org/ecma-262/6.0/#sec-module-semantics-static-semantics-early-errorsは、「ModuleItemListのExportedNamesは、任意の重複したエントリが含まれている場合は、構文エラーです。」)

私のアプローチの背後にある動機は、私ならば、明示的に再輸出し、非常に大きなまたは長いモジュールを最小限にすることです再エクスポートされたモジュール内の特定の関数またはメソッドをオーバーライドしたいだけです。

私のアプローチをes6/es2015に実装する方法はありますか?これまで

マイコード:

モジュール-a.js

export class MyFirstStandardClass { 
    sendMeMessages() { 
    return `hello, I'm a standard implementation`; 
    } 
} 
export function talkToMe() { 
    return `standard talking: how are you doing?`; 
} 

モジュール-b.js

import * as StandardModule from 'module-a'; 

export function talkToMe(condition = true) { 
    if (condition) { 
    return `project conditional talking: ${StandardModule.talkToMe()}`; 
    } 
    return `project without a condition!`; 
} 

export * from 'module-a'; 

モジュール-c.js

import * as MyModule from 'module-b'; 
import React, { Component } from 'react'; 

export default class App extends Component { 

    componentWillMount() { 
    console.log(MyModule); 
    this.myFirstStandardInstance = new MyModule.MyFirstStandardClass(); 
    } 

    render() { 
    return (
     <div> 
     <label> 
      Class 
     </label> 
     <div> 
      { this.myFirstStandardInstance.sendMeMessages() } 
     </div> 
     <label> 
      Function 
     </label> 
     <div> 
      { MyModule.talkToMe(true) } // returns 'standard talking: how are you doing?'; expected 'project conditional talking: standard talking: how are you doing?' 
     </div> 
     </div> 
    ); 
    } 
} 

答えて

0

ますmodule-aからexporまでのモジュールを選択できます1行にだから、中にあなたのmodule-b.jsあなたが行うことができます。

// export all modules excluding `talkToMe` 
export { MyFirstStandardClass, someOtherModule } from 'module-a'; 

export function talkToMe(condition = true) { 
    // ... 
} 

それとも、Object.assign()をオーバーライドします/デフォルトのオブジェクトをエクスポートし、除外するかを選択することができます。

import * as StandardModule from 'module-a'; 

const overridenExports = { 
    talkToMe: function(condition = true) { 
     // ... 
    } 
} 

const myModule = Object.assign({}, StandardModule, overridenExports); 

export default myModule; 

とインポートのデフォルトのように:

import MyModule from 'module-b'; 
+0

2ありがとう。私はすでにそれを試して、それは動作します。しかし、モジュール-aにたくさんのサブモジュールがあると、リストは非常に長くなります。 –

関連する問題