спецификатор модуля в импорте и экспорте es6

Я не понимаю, к чему относится спецификатор модуля в этих утверждениях:

export {bar} from "foo";

import {bar} from "foo";

Что означает "foo"? Это не может быть файл, так как это будет что-то вроде "./foo". Если это не файл, я предполагаю, что это идентификатор. Как определяется ID?

Я экспортирую из файла js, но импорт будет частью встроенного скрипта HTML (type="module") в браузере Firefox.

Версия браузера (и настройки браузера) были проверены для работы с модулями es6.

Заранее спасибо.


person Fred Finkle    schedule 05.07.2017    source источник


Ответы (1)


ES6 не указывает, на что ссылается спецификатор модуля.
Это действительно просто: идентификатор. Больше ничего.

Разрешение этих идентификаторов на фактический модуль остается на усмотрение среды. Загрузчик может интерпретировать их как относительные пути к файлам, как глобальные идентификаторы, как имена модулей npm, как и все остальное.

В браузерах <script type="module"> потребовалось некоторое время, чтобы указать, но, наконец, он здесь. Спецификатор модуля "foo" в настоящее время недействителен, браузер проигнорирует этот модуль, поскольку не знает, что с ним делать. Для загрузки потребуется что-то, что разрешается в URL-адрес. Джейк Арчибальд кратко обернул его:

"Голые" спецификаторы импорта в настоящее время не поддерживаются. Допустимые спецификаторы модуля должны соответствовать одному из следующих:

  • Полный не относительный URL. То есть, он не выдает ошибку при прохождении через new URL(moduleSpecifier).
  • Начинается с /.
  • Начинается с ./.
  • Начинается с ../.

Другие спецификаторы зарезервированы для использования в будущем, например для импорта встроенных модулей.

person Bergi    schedule 05.07.2017
comment
У вас есть какие-нибудь подсказки относительно того, как я могу узнать, что Chrome-загрузчик допускает значение спецификатора модуля? Казалось бы разумным, чтобы ссылка на объект, содержащий ссылки на экспортируемые объекты, могла использоваться в качестве спецификатора модуля. - person Fred Finkle; 06.07.2017