Использование модулей ES6 без шага Transpiler/Bundler
Я заинтересован в использовании нескольких библиотек JS, не зависящих от npm-инструментов и дополнительных этапов комплектации.
Благодаря поддержке модулей ES6 в браузере я могу использовать такие модули:
<script type="module">
import Vue from 'https://unpkg.com/vue@2.6.0/dist/vue.esm.browser.min.js';
new Vue({...});
</script>
Что хорошо, когда требуемый модуль не имеет транзитивных зависимостей. Но обычно эти модули из мира pre-ES6 делают это так:
import Vue from 'vue'
Который, кажется, не работает в современных браузерах. Я пропускаю какую-то опцию, чтобы связать спецификатор модуля с определенным URL, скажем, как атрибут <script>
тег.
Прагматичным решением было бы просто вернуться к использованию сборок модулей UMD, которые устанавливаются в глобальное пространство имен и позволяет мне явно перечислить все зависимости в основном файле HTML.
Но мне интересна концептуальная история. Инструменты связывания сообщают об этом, поскольку они будут устаревшими в будущем, когда появится собственная поддержка, но на данный момент поддержка браузеров довольно бесполезна, поскольку экосистема, вероятно, не всегда будет переходить на импорт модулей по относительным путям.
2 ответа
Для функций модуля ES без использования упаковщика в "большинстве" браузеров попробуйте es-module-shims
:
Это добавляет -shim
вариант текущей спецификации карты импорта. Которые могут быть заполнены на браузеры с базовой поддержкой модуля ES.
Я нашел ожидающее расширение, которое обещает заполнить этот пробел: https://github.com/WICG/import-maps
Импорт карт позволяет определить соответствие между короткими спецификаторами модуля и URL:
<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/vue@2.6.10/dist/vue.esm.browser.js"
}
}
</script>
Единственным недостатком является то, что на данный момент они поддерживаются только в последнем Chrome 74 и скрыты за экспериментальным флагом: chrome://flags/#enable-built-in-module-infra