Как будут работать модули 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 элементы, следовательно, необходимость нового тега).

Смотрите также:

Другие вопросы по тегам