Скомпилированный AngularDart загрязняет глобальную область видимости или переопределяет стандартные объекты браузера?

Я ищу фреймворк, который позволит мне написать SPA и встраиваемую библиотеку. Я хотел бы иметь способ поделиться компонентом между обоими. Поэтому я ищу решение, которое имеет относительно небольшое количество потенциальных конфликтов с другими фреймворками и с самим AngularDart. В том числе случай, когда библиотека была подключена с помощью вкладки скрипта, да две версии AngularDart на одной странице. Фреймворк с меньшим количеством глобальных объектов, без переопределений стандартных объектов, без обработки глобальных событий и с ограниченными конфликтами полифиллов.

Dart и AngularDart — это то, что мне нужно, но мне также нужно больше деталей и документов, чтобы подтвердить мои предположения. Все, что вы можете указать, будет очень полезно и высоко оценено (проблемы, PR, блоги, дорожная карта, коммиты, спецификации, документы)

На одной странице можно запускать несколько приложений AngularDart. Я протестировал приложение AngularDart todo, встроенное в него. Но мне нужно больше подробностей о том, что делает dart2js и как компилятор избегает загрязнения глобальной области видимости.


person como eStas    schedule 04.02.2018    source источник
comment
Я думаю, что AngularDart не поддерживает несколько приложений. Dart также не подходит для создания библиотек для использования в JavaSrcript. Я бы не ожидал проблем с другими пулями.   -  person Günter Zöchbauer    schedule 04.02.2018
comment
@GünterZöchbauer, да, возможно, ты прав. Но моя библиотека не будет открыта или открыта для расширения. Я просто хочу, чтобы набор компонентов был заключен в ограниченный JS API (это единственный способ их использования), который можно было бы включить как зависимость пакета и/или как тег скрипта. Самое главное, это не должно тормозить хост-приложение, потому что оно использует тот же фреймворк или полифилл. В чем проблема, с которой я столкнулся при работе с JS Angular 2–5 и Zone.js (да, я могу попробовать {ngZone: 'noop'}, но не гарантируется, что компоненты Material UI будут работать).   -  person como eStas    schedule 05.02.2018
comment
Если вы запустите dart2js, в вывод будет скомпилировано значительное количество кода фреймворка для эмуляции функций Dart, а также код абстракции браузера. Каждый вывод компиляции содержит эту часть. Его нельзя использовать совместно, потому что он подвержен встряхиванию дерева, что означает, что не каждый вывод содержит одни и те же части этого кода.   -  person Günter Zöchbauer    schedule 05.02.2018
comment
Очень интересно! Мне не нужно делиться фреймворком только с моими компонентами на основе AngularDart. И я не против иметь две версии фреймворков AngularDart, если они продолжат работать. Хотя этот комментарий поднимает вопрос, существует ли вероятность конфликта между созданным JS-выводом кода фреймворка, если я скомпилирую два разных проекта AngularDart и вставлю их на одну страницу? Теперь я говорю потенциал, потому что я смог взять предоставленный пример, скомпилировать его как два отдельных проекта и включить один в другой, используя тег <script>. Использует ли dart2js модули JS для переноса вывода?   -  person como eStas    schedule 05.02.2018
comment
Как именно dart2js избежать конфликтов между созданным JS-выводом среды выполнения Dart и кодом фреймворка, если кто-то скомпилирует два разных проекта AngularDart и поместит их на одну страницу?   -  person como eStas    schedule 05.02.2018
comment
Каждый из них находится в своем собственном теге сценария. Насколько я знаю, опасности конфликта нет, пока они не создают свойства для объекта window, которые, я не думаю, делают Dart или Angular сами по себе.   -  person Günter Zöchbauer    schedule 05.02.2018


Ответы (1)


Да, AngularDart должен хорошо подходить для ваших требований.

Сам по себе Dart вообще не должен загрязнять вашу область видимости, вы можете попробовать запустить dart2js на чем-то тривиальном (например, просто напечатать внутри main) и проверить код — он создает замыкание и выполняет его, так что ничего внутри недоступно снаружи. Также нет исправлений каких-либо глобальных объектов JS, поэтому вы можете запускать его вместе с чем угодно без помех. Если это не так, сообщите об ошибке.

Вы можете запускать столько приложений AngularDart на одной странице, сколько пожелаете. Чтобы сделать их полностью изолированными, вы можете скомпилировать каждый из них отдельно с помощью dart2js, тогда они не смогут получить доступ к каким-либо внутренним компонентам друг друга.

person rkj    schedule 16.02.2018