Плагин против компонента темы

Продолжаем обсуждение из Лайк дважды:

Извините, я не стал искать — я ужасный человек.

Но если существуют плагин и компонент темы, которые делают (почти) одно и то же, в чём главное различие между ними?

Плагин, конечно, требует пересборки, но есть ли другие причины, по которым один вариант лучше другого?

Во-первых, плагин Reactions и компонент темы change-like-icon выполняют (почти) не одно и то же.

Да, с помощью плагина Reactions можно изменить иконку лайка, но его основное назначение — предлагать несколько возможных реакций, поэтому его функциональность гораздо шире, чем просто косметическое изменение.

Плагин может делать всё, что может компонент темы, но компонент темы не может делать всего, что может плагин.

Плагин состоит из кода на стороне сервера и на стороне клиента,
а компонент темы состоит только из кода на стороне клиента и должен опираться на существующий код на стороне сервера.

Это верно в отношении этих. Я сегодня не особо думал, реактивность — мое второе имя :joy:

Так вот — в реальном мире плагины и компоненты никогда не делают одно и то же, и тогда единственная причина использовать тот или иной — это то, для чего он предназначен?

Это сформулировано настолько абстрактно, что ответ, скорее всего, «да».

Это правда, но из другой темы казалось, что он просто хочет сделать то же, что делает компонент темы, и использовать один эмодзи :+1: вместо :heart:.

Если вам нужно внести изменения в Rails (например, хранить или извлекать другие данные из базы данных), то вам нужен плагин.

Если вы меняете только фронтенд (Ember и CSS), то достаточно компонента темы. (Некоторое время назад разница была более тонкой.)

Если то, что вы делаете, можно реализовать только в Ember, то компонент темы установить проще, так как он не требует пересборки образа Docker.

Я довёл это до логического завершения здесь: Topic List Previews (TLP).

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

Некоторые продвинутые функции, требующие изменений в бэкенде, я добавил и сохранил в дополнительном плагине.

Ещё один хороший пример здесь: Guest Gate Theme Component. Изначально это был плагин, но оказалось, что в этом нет необходимости, поэтому он был возрождён как новый компонент темы (плагины появились раньше компонентов темы).

Вероятно, ещё один или два плагина можно преобразовать в компонент темы (я могу вспомнить один на ум)… и, скорее всего, появятся ещё кандидаты по мере добавления новых функций в ядро API…

Этот плагин:

Позже также был создан как компонент темы: