с использованием синтаксиса распространения в javascript es6 с именем exports

Я пытаюсь импортировать все из библиотеки в виде хеша, изменять его и повторно экспортировать измененный хеш, не зная всех названных экспортов в библиотеке. Например:

import * as reactBootstrap from 'react-bootstrap';

wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap);

export {
  ...wrappedReactBootstrap
};

// or
export wrappedReactBootstrap;

Мое понимание https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export заключается в том, что следующее не допускается спецификацией. Может кто-нибудь подтвердить?

Очевидно, что о цикле не может быть и речи, поскольку операторы экспорта и импорта должны быть верхнего уровня.


person Robert Balicki    schedule 08.04.2017    source источник


Ответы (1)


Распространение остальных объектов - это предложение этапа 3 и не является частью какой-либо спецификации (вероятно, быть включенным в ES2018).

Что еще более важно, export имеет синтаксис, который имитирует существующий синтаксис JS, но не интерпретирует { ... } как выражение. export синтаксис был строго определен, поскольку модули ES2015 предполагается статический анализ. Это одно из их преимуществ, но оно требует, чтобы разработчик явно указывал экспорт и импорт.

Поскольку { ...wrappedReactBootstrap } вводит динамический экспорт (он использовался здесь именно для этой цели), он не поддерживается модулем ES2015 export и маловероятно, что он будет.

Если необходимо обеспечить динамическое поведение для экспорта, его можно экспортировать и импортировать как именованный объект или объект по умолчанию.

import * as reactBootstrap from 'react-bootstrap';

export default doFunnyThingsTo(reactBootstrap);

И использовал как

import wrappedReactBootstrap from '...';

const { funny, thing } = wrappedReactBootstrap;

Очевидно, что таким образом объект wrappedReactBootstrap не получит преимуществ модулей ES2015, например встряхивание деревьев.

person Estus Flask    schedule 08.04.2017