web-dev-qa-db-fra.com

en utilisant la syntaxe ... spread dans javascript es6 nommé exports

J'essaie d'importer tout d'une bibliothèque en tant que hachage, de le modifier et de réexporter le hachage modifié, sans connaître toutes les exportations nommées dans une bibliothèque. Par exemple:

import * as reactBootstrap from 'react-bootstrap';

wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap);

export {
  ...wrappedReactBootstrap
};

// or
export wrappedReactBootstrap;

Ma compréhension de https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export est que ce qui suit n'est pas autorisé par la spécification. Quelqu'un pourrait-il confirmer?

De toute évidence, le bouclage est hors de question, car les déclarations d'exportation et d'importation doivent être de niveau supérieur.

19
Robert Balicki

La répartition du reste de l'objet est proposition de l'étape et ne fait partie d'aucune spécification (sera probablement incluse dans ES2018).

Plus important encore, export a une syntaxe qui imite la syntaxe JS existante mais n'interprète pas { ... } comme expression. la syntaxe export a été strictement définie car les modules ES2015 sont censés être analysés statiquement. C'est l'un de leurs avantages, mais cela oblige le développeur à spécifier explicitement les exportations et les importations.

Puisque { ...wrappedReactBootstrap } introduit l'exportation dynamique (elle a été utilisée ici exactement à cette fin), elle n'est pas prise en charge par le module ES2015 export et il est très peu probable qu'elle le soit.

S'il est nécessaire de fournir un comportement dynamique pour l'exportation, il peut être exporté et importé en tant qu'objet nommé ou par défaut.

import * as reactBootstrap from 'react-bootstrap';

export default doFunnyThingsTo(reactBootstrap);

Et utilisé comme

import wrappedReactBootstrap from '...';

const { funny, thing } = wrappedReactBootstrap;

De toute évidence, wrappedReactBootstrap objet ne bénéficiera pas des avantages des modules ES2015 de cette façon, par exemple secouer les arbres.

22
Estus Flask