2017-04-08 25 views
8

Próbuję zaimportować wszystko z biblioteki jako skrót, zmodyfikować i ponownie wyeksportować zmodyfikowany skrót, bez znajomości wszystkich nazwanych eksportów w biblioteka. Na przykład:używając operatora rozprzestrzeniania `...` w javascript es6 o nazwie export

import * as reactBootstrap from 'react-bootstrap'; 

wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap); 

export { 
    ...wrappedReactBootstrap 
}; 

// or 
export wrappedReactBootstrap; 

Moje rozumienie https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export jest to, że nie jest dozwolone przez spec następujący. Czy ktoś mógłby potwierdzić?

Oczywiście pętli nie można wykluczyć, ponieważ instrukcje eksportu i importu muszą być na najwyższym poziomie.

Odpowiedz

10

Spread spoczynkowy obiektu to stage 3 proposal i nie stanowi części żadnej specyfikacji (zostanie prawdopodobnie zawarty w ES2018).

Co ważniejsze, export ma składnię, która naśladuje istniejącą składnię JS, ale nie interpretuje { ... } jako wyrażenia. export syntax was strictly defined, ponieważ moduły ES2015 powinny być analizowane statycznie. Jest to jedna z ich zalet, ale wymaga od programisty wyraźnego określenia eksportu i importu.

Od { ...wrappedReactBootstrap } wprowadza dynamiczny eksport (został tu użyty dokładnie w tym celu), nie jest obsługiwany przez moduł ES2015 export i jest bardzo mało prawdopodobne, że tak będzie.

Jeśli zachodzi potrzeba zapewnienia dynamicznego zachowania podczas eksportu, można je wyeksportować i zaimportować jako obiekt nazwany lub domyślny.

import * as reactBootstrap from 'react-bootstrap'; 

export default doFunnyThingsTo(reactBootstrap); 

i używane jak

import wrappedReactBootstrap from '...'; 

const { funny, thing } = wrappedReactBootstrap; 

Oczywiście wrappedReactBootstrap obiekt nie będzie czerpać korzyści z ES2015 moduły w ten sposób, na przykład drżenie drzew.

Powiązane problemy