Я хотел бы реализовать плагиновую (плагиновую) структуру в приложении Angular 2
, Angular 4
или Angular 5
.
(Моим конкретным вариантом использования для разработки этой подключаемой структуры является то, что мне нужно разработать миниатюруную систему управления контентом. По ряду причин, которые не обязательно будут развиты здесь, Angular 2/4/5
является почти идеальным решением для большинства потребностей этого система.)
Благодаря подключаемой структуре (или плагиновую архитектуру) я имею в виду систему, которая позволяет сторонним разработчикам создавать или расширять функциональные возможности основного приложения с помощью подключаемых компонентов, не имея прямого доступа или знания первичного исходный код приложения или внутренние работы.
(Эта формулировка о "без прямого доступа к исходному коду приложения или его внутренней работе" или "знание" является основной задачей.)
Примеры подключаемых фреймворков включают общие системы управления контентом, такие как WordPress
или Drupal
.
Идеальная ситуация (как в случае с Drupal) заключается в простой установке этих подключаемых компонентов (или плагинов) в папку, приложение автоматически обнаруживает или обнаруживает их, и они просто магически "работают". " Если это произойдет в какой-то горячей подключаемой манере, то есть во время работы приложения, было бы оптимальным.
В настоящее время я пытаюсь определить ответы (с вашей помощью) на следующие пять вопросов.
- Практичность: Является ли плагинов для приложения
Angular 2/4/5
даже практичным? (До сих пор я не нашел практического способа создания действительно подключаемой структуры с помощьюAngular2/4/5
.) - Ожидаемые задачи: Какие проблемы могут возникнуть при реализации плагина для приложения
Angular 2/4/5
? - Стратегии реализации: Какие конкретные методы или стратегии могут быть использованы для реализации платформы плагинов для приложения
Angular 2/4/5
? - Рекомендации: Каковы наилучшие методы внедрения плагиновой системы для приложения
Angular 2/4/5
? - Альтернативные технологии: Если плагин не применим в приложении
Angular 2/4/5
, какие относительно эквивалентные технологии (например,React
) могут быть подходящими для современного высокореактивного веб-приложения?
В общем случае использование Angular 2/4/5
очень желательно, потому что:
- это, естественно, очень быстро - это невероятно.
- он потребляет очень мало полосы пропускания (после начальной загрузки)
- он имеет относительно небольшую площадь (после
AOT
иtree shaking
) - и этот след продолжает сокращаться - он очень функциональен, а команда и сообщество Angular продолжают быстрый рост своей экосистемы.
- он хорошо работает со многими из лучших и новейших веб-технологий, таких как
TypeScript
иObservables
- Angular 5 теперь поддерживает сервис-работников (https://medium.com/@webmaxru/a-new-angular-service-worker-creating-automatic-progressive-web-apps-part-1-theory-37d7d7647cc7)
- подкрепляется
Google
, он, вероятно, будет поддерживаться и улучшаться в будущем
Я бы очень хотел использовать Angular 2/4/5
для моего текущего проекта. Если я могу использовать Angular 2/4/5
, я также буду использовать Angular-CLI
и, возможно, Angular Universal
(для рендеринга на стороне сервера).
Вот мои мысли до сих пор касаются вышеперечисленных вопросов. Пожалуйста, просмотрите и сообщите свои отзывы и просвещение.
-
Angular 2/4/5
приложения потребляют пакеты - но это не обязательно то же самое, что разрешать плагины внутри приложения. Плагин в других системах (например,Drupal
) может быть добавлен путем добавления папки плагина в каталог общих модулей, где система автоматически "подбирается" системой. ВAngular 2/4/5
пакет (в качестве плагина может быть) обычно устанавливается черезnpm
, добавляется вpackage.json
, а затем вручную импортируется в приложение - как вapp.module
. Это намного сложнее, чем методDrupal
для удаления папки и система автоматически определяет пакет. Чем сложнее установить плагин, тем менее вероятно, что люди будут использовать их. Было бы намного лучше, если бы былAngular 2/4/5
способ автоматического обнаружения и установки плагинов. Мне очень интересно найти метод, который позволяет не разработчикам устанавливать приложениеAngular 2/4/5
и устанавливать любые выбранные плагины без необходимости понимать всю архитектуру приложения. -
Как правило, одним из преимуществ предоставления подключаемой архитектуры является то, что сторонним разработчикам очень легко расширить функциональность системы. Очевидно, что эти разработчики не будут знакомы со всеми сложностями кода для приложения, в которое они подключаются. После разработки плагинов другие даже менее технические пользователи могут просто установить приложение и любые выбранные плагины. Однако
Angular 2/4/5
относительно сложна и имеет очень длинную кривую обучения. Чтобы еще больше усложнить ситуацию, в большинстве производственных приложенийAngular 2/4/5
также используютсяAngular-CLI
,Angular Universal
иWebPack
. Кто-то, кто реализует плагин, вероятно, должен иметь хотя бы некоторые базовые знания о том, как все они сочетаются друг с другом - наряду с сильным рабочим знаниемTypeScript
и разумным знакомством сNodeJS
. Являются ли требования к знаниям настолько экстремальными, что никакая третья сторона никогда не захочет разработать плагин? -
В большинстве плагинов, вероятно, будет некоторый компонент на стороне сервера (например, для хранения/получения данных, связанных с плагинами), а также для вывода на клиентскую сторону.
Angular 2/4/5
специально (и сильно) препятствует разработчикам внедрять собственные шаблоны во время выполнения, поскольку это создает серьезную угрозу безопасности. Чтобы обрабатывать много типов вывода, которые может быть подключен плагин (например, отображение графика), кажется, что разрешение пользователям создавать контент, который вводится в поток ответов, в одной форме, вероятно, необходимо. Интересно, как можно было бы удовлетворить эту потребность без образно измельчающих механизмов безопасностиAngular 2/4/5
. -
Большинство производственных приложений
Angular 2/4/5
предварительно скомпилированы с использованиемAhead of Time
(AOT
) компиляции. (Вероятно, все должно быть.) Я не уверен, что плагины могут быть добавлены в (или интегрированы) предварительно скомпилированные приложения. Лучший сценарий будет включать компиляцию плагинов отдельно от основного приложения. Однако я не уверен, как это сделать. Отказ может заключаться в повторной компиляции всего приложения с любыми включенными плагинами, но это немного усложняет административный пользователь, который просто хочет установить приложение (на своем собственном сервере) вместе с любыми выбранными плагинами. -
В приложении
Angular 2/4/5
, особенно предварительно скомпилированном, один фрагмент ошибочного или противоречивого кода может разорвать все приложение.Angular 2/4/5
приложения не всегда легче отлаживать. Применение недобросовестных плагинов может привести к очень неприятным переживаниям. В настоящее время я не знаю о механизме для грамотной обработки плагинов с неправильным поведением.
UPDATE:
11/22/2017. Теперь, когда был выпущен Angular 5, я пересматриваю, какие новые функции могут лучше облегчить реализацию подключаемой инфраструктуры.