Как будут работать модули ECMAScript 6 Harmony в тегах HTML-скриптов?
Я понимаю, что это еще не реализовано и так гипотетически.
Когда модули ES6 Harmony будут в конечном итоге реализованы в современных браузерах, как синтаксис и реализация будут обрабатывать встроенный JavaScript? Для сравнения я могу представить концептуальное различие в том, что каждый файл считается модулем, что свидетельствует о том, что документ HTML будет иметь <script src="...">
тег для каждого отдельного модуля.
Тем не менее, это кажется странным в браузере, так как это означает, что если у вас есть 50 модулей, теперь у вас есть 50 подключений клиент / сервер. Другая проблема может возникнуть, если вы объедините файлы или, возможно, вставите несколько модулей в <script>...</script>
тег.
В конечном итоге это будет связано с глобальной проблемой между именами:
<script>
var Foo = {};
var Baz = 1; // Local or Global?
export default Foo;
import Foo in 'foo';
var Bar = {};
var Baz = 2; // Local or Global?
export default Bar;
</script>
В CommonJS -> trans-piled или AMD все завернуто в замыкание. Приводит меня к мысли, что когда выйдет ES6, нам все равно придется свернуть наш код:
<script>
(function() {
var Foo = {};
var Baz = 1; // Definitely Local now!
export default Foo;
})();
(function() {
import Foo in 'foo';
var Bar = {};
var Baz = 2; // Definitely Local now!
export default Bar;
})();
</script>
Как будущие реализации модулей ES6 Harmony будут обрабатывать модель плоской зависимости браузера от объединенных источников?
1 ответ
Модули могут быть объединены вместе без проблем с module SomeName { /* module contents here */ }
синтаксис
РЕДАКТИРОВАТЬ: Синтаксис блока модуля был исключен из спецификации. Выводы комитета, по-видимому, заключаются в том, что конкатенация - это хак, чтобы обойти ограничение HTTP 1. Окончательное решение состоит в том, чтобы иметь сервер и клиент с поддержкой HTTP 2, чтобы клиент мог мультиплексировать свои запросы, а сервер мог выдавать дополнительные ресурсы клиенту (спасибо, Андреас!)
Что касается работы с семантикой модуля в браузере, <module>
Был введен тег для создания отдельных модулей на странице. (Поскольку модули могут быть разрешены асинхронно, они не соответствуют семантике inline script
элементы, следовательно, необходимость нового тега).
Смотрите также:
- Отличная статья ECMAScript 6 модулей: окончательный синтаксис доктора Акселя Раушмайера
- Фактические определения из одного из предложений ES6