Можно ли экспортировать результат import* как в ES2015?

В ES2015 можно импортировать весь модуль как объект, свойства которого являются экспортом модуля:

import * as name from 'module';

Я нахожу это чрезвычайно полезным для пространства имен и использую его все время.

Также возможно реэкспортировать экспорт других модулей:

export { name } from 'module'; // selectively
export * from 'other-module'; // indiscriminately

Сейчас пытаюсь написать библиотеку с пространством имен в таком стиле. Интуитивный способ собрать все в модуле верхнего уровня будет таким:

export * as name from 'module';

Но это, кажется, не работает; Babel и Rollup отвергают его.

Я мог импортировать модуль как объект, создать клон, перебирая его ключи, и экспортировать его, но тогда это был бы просто старый динамический объект, поэтому я потерял бы огромные преимущества, которые предоставляет Rollup. .

Итак, неужели действительно нет способа сделать это с помощью декларативного синтаксиса модуля? Мне кажется, что этому нет оправдания.


person Permutator    schedule 26.11.2015    source источник
comment
Я не понимаю, чего вы пытаетесь добиться с помощью export * as name from 'module';. Как вы планируете использовать такой экспорт? Для импорта * всегда требуется пространство имен as X, поэтому любое имя, которое вы укажете в операторе экспорта, в любом случае не будет иметь значения, верно?   -  person    schedule 26.11.2015
comment
@torazaburo name — это имя, с которым экспортируется объект модуля. Например, если модуль abc содержит export * as xyz from 'xyz', а вы import * as abc from 'abc', вы сможете получить доступ к экспорту xyzs через abc.xyz.   -  person Permutator    schedule 26.11.2015
comment
возможный дубликат синтаксиса модуля ES6: возможно ли export * as Name from …?   -  person Bergi    schedule 11.03.2019


Ответы (1)


Нет, этого просто не было в ES6. Тем не менее, есть этап 1 добавить их, и накопительный пакет рассмотрит возможность его реализации.

До тех пор вам нужно будет использовать два объявления и локальную привязку, хотя нет необходимости клонировать объект:

import * as name from 'module';
export { name };
person Bergi    schedule 26.11.2015
comment
О, фантастика! Это именно то, что мне было нужно! Я не знал, что для этого вам нужны фигурные скобки, поскольку MDN их не включает. - person Permutator; 26.11.2015
comment
Где MDN не использует фигурные скобки? Конечно, во многих других экспортных декларациях (по умолчанию, vars и т. д.) они не нужны. - person Bergi; 26.11.2015
comment
В верхней части страницы оператора экспорта указан синтаксис для именованных экспортов как export name1, name2, ..., nameN; без фигурных скобок. Дополнительно в описании приводится такой пример: export myFunction; // exports a function declared earlier - person Permutator; 26.11.2015
comment
Этих документов, похоже, мало. Лучше посмотрите на 2ality.com/2014/09/es6-modules. -final.html (а я исправлю MDN). - person Bergi; 26.11.2015
comment
Кстати, если вы проверите и не увидите проблемы, то это потому, что я только что изменил его. Первый раз редактирую, надеюсь не сильно накосячил. - person Permutator; 26.11.2015