2016-01-12 34 views
5

Tüm modülü yeniden dışa aktarmak ve yeniden dışa aktarılan modülün yalnızca belirli bir işlevini geçersiz kılmak istiyorum. Ancak, aynı işlev zaten yeniden gönderildiğinde geçersiz kılma işlevinin işlenmemesi dışarıya çıkıyor gibi görünüyor.es2015 yeniden dışa aktarma modülü ve yeniden dışa aktarılmış modülün tek dışa aktarma işlevini geçersiz kılma

(http://www.ecma-international.org/ecma-262/6.0/#sec-module-semantics-static-semantics-early-errors, 'O ModuleItemList ait ExportedNames çift girişleri içeriyorsa sözdizimi hatası değil.')

benim yaklaşımın ardındaki motivasyon ben eğer açık yeniden ihraç çok büyük ya da uzun modül minimize etmektir Yeniden ihraç edilen modülde sadece belirli bir işlevi veya yöntemi geçersiz kılmak ister.

Benim yaklaşımımı es6/es2015'te uygulamak için herhangi bir yolu var mı? Bugüne kadar

Kodum:

modül-a.js

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

modül-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'; 

modül-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> 
    ); 
    } 
} 

cevap

0

Sen module-a'dan hangi modüllerin ihracat yapılacağını seçebilirsiniz Bir satırda t. Yani içinde senin module-b.js Yapabileceğiniz:

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

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

Yoksa Object.assign() ile geçersiz kılmak/varsayılan nesne vermek ve dışlamak için seçebilecek:

import * as StandardModule from 'module-a'; 

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

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

export default myModule; 

ve ithalat varsayılan gibi:

import MyModule from 'module-b'; 
+0

2 teşekkürler. Çoktan denedim ve işe yarıyor. Ancak, modülde çok fazla alt modülünüz varsa, liste çok uzun olacaktır. –

İlgili konular