Как определить функции модулей es6

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

Поскольку export - это ключевое слово, что-то вроде того, что выкинет синтаксическую ошибку:

typeof export

Ответы

Ответ 1

Версия 27 спецификации имела API Reflect.Loader, который можно было бы использовать для отражения модуля.

Хотя это не является прямым обнаружением функции для ключевого слова export, возможно, было бы возможно загрузить модуль, который использует ключевые слова экспорта из data-uri, а затем проверить, не выдает ли он ошибки анализа или нет.

Но он был удален с исправлением 28 со следующей записью изменений:

Удаленный конвейер загрузчика и API Reflect.Loader(функциональность передается отдельной спецификации)


Таким образом, насколько я могу судить, спецификация не обеспечивает какого-либо способа обнаружения функции на момент написания.

В будущем это возможно при Reflect.Loader или его замене.

Изменить: спецификация загрузчика, по-видимому, разработана под управлением whatwg, но она еще не находится в состоянии, из которого мы могли бы получить обнаружение функции.

Ответ 2

Проверьте наличие атрибута noModule:

document.currentScript && "noModule" in document.currentScript;

Ответ 3

Используйте


'noModule' in HTMLScriptElement.prototype

исх

Ответ 4

Я знаю, что это немного поздно, но вот функция, которую я разработал для проверки возможностей операторов импорта ES6. Я знаю, что это не совсем то, что искал ОП, но, тем не менее, это ответ:

function hasImport() {
    var test = false;
    try {
        if(typeof import("").catch(function() { ;; }) === "object")
            test = true;
    } catch(e) { ;; }
    return test;
}

Обратите внимание, что это всегда должно быть сохранено как его собственная функция (не встроенная), если это вообще возможно; Иногда Javascript может отказаться от оптимизации функций, содержащих блоки "try", подобные этим, что отрицательно скажется на производительности.