Почему экспорт * и импорт * работают по-разному в модуле ES2015 - PullRequest
0 голосов
/ 08 марта 2019

В модуле ES2015, export * from 'someModule' не экспортирует экспорт по умолчанию из 'someModule', в то время как import * as m from 'someModule' импортирует экспорт по умолчанию из 'someModule'.

Например, в module.js:

export default 'default'
export const foo = 'foo'

в proxy.js:

export * from './module'

в bar.js:

import * as m from './module'  // m is { foo: 'foo', default: 'default' }
import * as p from './proxy'  // p is { foo: 'foo' }

Я протестировал его с помощью веб-пакета 4.29.6 (нулевая конфигурация).

и MDN пишет:

Следующий синтаксис не экспортирует экспорт по умолчанию из импортированный модуль:

экспорт * из…;

Если вам нужно экспортировать значение по умолчанию, напишите следующее:

экспорт {default} из 'mod';

Разумно, чтобы export * from 'someModule' не экспортировал экспорт по умолчанию из 'someModule', поскольку текущий модуль может также захотеть экспортировать свой собственный модуль по умолчанию. Но почему import * включает экспорт по умолчанию? Это ожидаемое поведение от спецификации модуля ES2015?

1 Ответ

1 голос
/ 08 марта 2019

Но почему import * в любом случае включает экспорт по умолчанию?

Объект пространства имен модуля включает в себя все экспорты модуля. Здесь нет ничего особенного в идентификаторе default. Нет причин явно опускать его.

Это ожидаемое поведение от спецификации модуля ES2015?

Да.

Разумно, если export * from 'someModule' не экспортирует экспорт по умолчанию из 'someModule', поскольку текущий модуль может также захотеть экспортировать свой собственный модуль по умолчанию.

Афаик, настоящая причина исключения заключается в том, что вы можете export * из нескольких модулей, не конфликтуя при экспорте default.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...