Модули ES6 против импорта HTML

Импорт HTML является частью Веб-компоненты и предоставить способ обработки зависимостей в Интернете. Модули ES6 также делают то же самое, но только для кода Javascript.

Есть ли ясность в том, как эти двое будут работать вместе?

Редактировать: пример: в моем недавнем проекте у меня было два компонента (файла) Javascript, один из которых зависел от другого, но любой HTML-код (который является другим компонентом) мог использовать любой из них. . Поэтому, когда я включил зависимый скрипт в свой HTML, я не хотел включать и родительский скрипт (чтобы избежать ручной обработки зависимостей). Кажется, нет четко определенного способа сделать это, кроме как смешивать модули ES6 со скриптами. Единственный вариант, который я вижу, - это поддерживать отдельный файл для каждого компонента с указанием необходимых файлов и зависимостей, как это делает component.io.


person Debjit    schedule 17.01.2014    source источник
comment
Хороший вопрос! Интересно, будет ли это похоже на то, что произойдет, если вы поместите тег <script> для одного и того же скрипта дважды на странице, но я надеюсь, что нет.   -  person basicallydan    schedule 18.03.2014
comment
У меня нет полного ответа на главный вопрос, но интересно отметить, что одни и те же запросы ‹script› в импорте HTML не дублируются в сетевых вызовах.   -  person tbranyen    schedule 18.03.2014
comment
Вариант использования для этой проблемы — когда вы используете Polymer Elements, которые используют импорт HTML, в директивах компонентов Angular 2.0, которые используют модули ES6.   -  person Tarun    schedule 29.05.2015


Ответы (2)


Как веб-компоненты взаимодействуют с модулями ES6, еще не доработано, но есть как минимум два варианта.

В ES6 есть понятие областей. Если у вас есть JavaScript в двух iFrames, то два iFrames могут взаимодействовать друг с другом и передавать данные туда и обратно. Но они в разных сферах. Это означает, что вы можете изменить объект Array.prototype в одном, не затрагивая другой. У каждого веб-компонента, скорее всего, будет своя область, поэтому они не будут мешать друг другу.

У каждого реалма есть куча глобальных объектов, включая (скорее всего, спецификация еще не завершена) объект Loader. Вы можете создать новый экземпляр Loader и использовать его для загрузки модулей. В области уже существует один, который используется по умолчанию. Каждый экземпляр Loader имеет свой собственный список определенных модулей, поэтому каждому веб-компоненту может быть присвоен собственный экземпляр Loader.

Я не уверен, будут ли веб-компоненты давать разные Realms или разные Loader объекты, но разные веб-компоненты, скорее всего, не смогут мешать друг другу.

person Marius    schedule 18.03.2014
comment
Эта ссылка обсуждает ту же проблему 2 года назад, но до сих пор я не вижу никаких обновлений: esdiscuss.org/topic/. - person Tarun; 29.05.2015
comment
Это отличный ответ, и на него уже есть ссылки. Можем ли мы обновить его с учетом реалий 2017 года? :) - person Vladislav Rastrusny; 03.11.2017
comment
В начале 2019 года обновление здесь было бы еще более актуальным. - person Philipp Hanes; 05.02.2019

Вот последние новости: Chrome имеет встроенную поддержку всех 4 спецификаций веб-компонентов, а Mozilla объявил, что они не будут выпускать реализацию импорта HTML именно из-за это ожидающее согласование с модулями ES6, которое не будет решено в ближайшее время, особенно потому, что вот что Mozilla говорит об этом:

Мы ожидаем, что как только модули JavaScript — функция, полученная из библиотек JavaScript, написанных сообществом разработчиков, — будут выпущены, то, как мы смотрим на эту проблему, изменится. Мы также узнали от Gaia и других, что отсутствие импорта HTML не является проблемой, поскольку при желании эту функциональность можно легко обеспечить с помощью полифилла.

`

person Tarun    schedule 29.05.2015