Оновлення 24.05.2018: Зараз ми отримуємо +3 версії Angular від моєї оригінальної публікації і досі не маємо остаточного рішення. Ларс Мейддам (@LarsMeijdam) придумав цікавий підхід, який, безумовно, варто подивитися. (Через проблеми, що стосуються власності, йому довелося тимчасово видалити сховище GitHub, де він первісно розмістив зразок. Однак ви можете надіслати йому повідомлення безпосередньо, якщо вам потрібна копія. Щоб отримати докладнішу інформацію, перегляньте коментарі нижче.)
Недавні архітектурні зміни в кутовій 6 наблизили нас до рішення. Крім того, кутові елементи ( https://angular.io/guide/elements ) забезпечують певну функціональність компонентів - хоча і не зовсім те, що я спочатку описав у цій публікації.
Якщо хтось із дивовижної команди Angular натрапив на це, зауважте, що, здається, є багато інших людей, які також дуже зацікавлені в цій функціональності. Можливо, варто розглянути питання про відставання.
Я хотів би реалізувати спільні (плагін) рамки як Angular 2
, Angular 4
, Angular 5
або Angular 6
додатку.
(Моя специфічна ситуація використання для розробки цієї підключається рамки полягає в тому, що мені потрібно розробити мініатюрну систему управління вмістом. З ряду причин, не обов'язково розроблених тут, Angular 2/4/5/6
це майже ідеально підходить для більшості потреб цієї системи.)
Під підключається рамкою (або архітектурою плагінів) я конкретно маю на увазі систему, яка дозволяє стороннім розробникам створювати або розширювати функціональність первинної програми за допомогою використання підключаються компонентів, не маючи прямого доступу до джерела вихідного коду основної програми. або внутрішня робота .
( Основна мета - це фразове слово " без прямого доступу до джерела коду програми чи внутрішніх розробок " чи знань ").
Приклади підключаються рамок включають загальні системи управління вмістом, такі як WordPress
або Drupal
.
Ідеальною ситуацією (як і з Drupal) було б просто спроможність помістити ці підключаються компоненти (або плагіни) у папку, мати додаток для автоматичного виявлення або виявлення, і вони просто магічно "працюють". Якщо це відбудеться якимось способом гарячого підключення, тобто під час роботи програми, було б оптимальним.
Наразі я намагаюся визначити відповіді ( з вашою допомогою ) на наступні п’ять питань.
- Практичність: Чи є платформа для
Angular 2/4/5/6
додатка навіть практичною? (До цих пір я не знайшов жодного практичного способу створити справді підключається рамкуAngular2/4/5/6
.) - Очікувані виклики: Які проблеми можуть виникнути у впровадженні плагінної програми для
Angular 2/4/5/6
програми? - Стратегії впровадження: Які конкретні прийоми чи стратегії можуть бути використані для впровадження плагінної програми для
Angular 2/4/5/6
програми? - Кращі практики: Які найкращі практики впровадження системи плагінів для
Angular 2/4/5/6
програми? - Альтернативні технології: Якщо платформа не є практичною у
Angular 2/4/5/6
додатку, які відносно еквівалентні технології (наприкладReact
) можуть бути придатні для сучасного високореактивного веб-додатка ?
Взагалі використання Angular 2/4/5/6
дуже бажано, оскільки:
- це, природно, надзвичайно швидко - надзвичайно.
- вона споживає дуже мало пропускної здатності (після початкового навантаження)
- він має відносно невеликий слід (після
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/6
для свого поточного проекту. Якщо я зможу використовувати Angular 2/4/5/6
, я також буду використовувати Angular-CLI
і, ймовірно, Angular Universal
(для візуалізації на стороні сервера.)
Ось мої думки, поки що стосовно вищезазначених питань. Перегляньте та надайте свої відгуки та просвітлення.
Angular 2/4/5/6
програми споживають пакети, але це не обов'язково те саме, що дозволяти плагінам у програмі. Плагін в інших системах (наприкладDrupal
) можна по суті додати, перетягнувши папку плагінів у загальну каталог модулів, де вона автоматично «підхоплюється» системою. УAngular 2/4/5/6
пакеті (як може бути плагін) зазвичай встановлюється черезnpm
, додається доpackage.json
, а потім вручну імпортується в додаток - як уapp.module
. Це набагато складніше, ніжDrupal
метод викидання папки та система автоматично визначає пакет. Чим складніше встановити плагін, тим менше ймовірність людей використовуватиме їх. Було б набагато краще, якби був спосібAngular 2/4/5/6
автоматично виявляти та встановлювати плагіни. Мені дуже цікаво знайти метод, який дозволяє не розробникам встановлюватиAngular 2/4/5/6
додаток і встановлювати будь-які обрані плагіни, не розуміючи всю архітектуру програми.Загалом, однією з переваг надання архітектури, що підключається, є те, що стороннім розробникам дуже просто розширити функціональність системи. Очевидно, що ці розробники не будуть знайомі з усіма тонкощами коду програми, до якої вони підключаються. Після розробки плагінів інші, навіть менш технічні користувачі можуть просто встановити програму та будь-які вибрані плагіни. Однак
Angular 2/4/5/6
є відносно складним і має дуже тривалий кривий досвід навчання. Щоб ще більше ускладнити речі, більшість виробничихAngular 2/4/5/6
програм також використовуютьAngular-CLI
,Angular Universal
іWebPack
. Хтось, хто реалізує плагін, мабуть, повинен мати хоч якісь базові знання про те, як усі вони поєднуються разом - разом із міцними робочими знаннями проTypeScript
і розумне знайомство зNodeJS
. Чи вимоги до знань такі екстремальні, що жодна сторона ніколи не захоче розробити плагін?Більшість плагінів, ймовірно, матимуть частину серверного компонента (наприклад, для зберігання / отримання даних, пов’язаних із додатком), а також деякий вихід на стороні клієнта.
Angular 2/4/5
конкретно (і сильно) заважає розробникам не вводити власні шаблони під час виконання - оскільки це становить серйозний ризик для безпеки. Для того, щоб обробляти безліч типів виводу, до якого може бути розміщений плагін (наприклад, відображення графіка), очевидно, що дозволити користувачам створювати вміст, який вводиться в потік відповідей, в іншій формі, ймовірно, необхідне. Цікаво, як можна було б задовольнити цю потребу без образно подрібнюючихAngular 2/4/5/6
механізмів безпеки.Більшість виробничих
Angular 2/4/5/6
додатків попередньо компілюються за допомогоюAhead of Time
(AOT
) компіляції. (Мабуть, все має бути.) Я не впевнений, як плагіни можуть бути додані до (або інтегровані з) попередньо складеними програмами. Найкращий сценарій передбачав би складання плагінів окремо від основного додатку. Однак я не впевнений, як зробити цю роботу. Резервним може бути повторна компіляція всієї програми з будь-якими включеними плагінами, але це трохи ускладнює завдання адміністративного користувача, який просто хоче встановити додаток (на власному сервері) разом із будь-якими вибраними плагінами.У
Angular 2/4/5/6
додатку, особливо заздалегідь складеному, один фрагмент помилкового або суперечливого коду може порушити всю програму.Angular 2/4/5/6
програми не завжди найлегші для налагодження. Застосування недоброзичливих плагінів може призвести до дуже неприємних вражень. На даний момент я не знаю механізму витонченого поводження з недоброзичливими плагінами.