Разработка плагинов быстрее благодаря выделению фронтенда в отдельный компонент темы

Я ранее задавал вопрос о том, как настроить локальное окружение для более быстрой разработки при создании плагина, и знаю, что это интересовало и других.

Я использую новый рабочий процесс, который работает отлично, и решил поделиться им на случай, если это окажется полезным для других. Он не решает всех проблем, но делает работу гораздо приятнее. Вот детали:

Сначала о моей предыдущей проблеме:

Для разработки плагина мне приходилось писать код на локальном экземпляре Discourse, и это было очень медленно, потому что: 1) любое изменение файлов требовало перезагрузки страницы, а мой компьютер делал это очень медленно при запуске Discourse (около 30 секунд на перезагрузку страницы); 2) локальный сайт Discourse для разработки, на котором я тестировал, был очень медленным (медленная навигация и т. д.); 3) любое изменение в бэкенд-коде плагина требовало остановки и перезапуска сервера, что занимало несколько минут. Всё это время вентилятор моего компьютера работал на полную мощность.

В результате на то, что при плавном рабочем процессе я обычно делаю за 10 минут, уходило около часа.


Моё решение

В отличие от разработки плагина, рабочий процесс создания компонента темы просто отличный, благодаря Discourse theme CLI. (Мои шаги по его использованию здесь.) Это быстро и плавно.

Почему разработка темы или компонента темы так быстрее и проще

С помощью инструмента темы CLI вы можете писать код темы локально, но «наблюдать» за ним (то есть запускать тему) на живом сайте (либо на вашем реальном сайте, либо на реальном сайте в режиме предпросмотра, либо на тестовом живом сайте, который вы настроили).

Таким образом, вам не нужно запускать сам Discourse на вашем компьютере, и поэтому мой компьютер не замедляется, как это бывает при разработке плагина. И всякий раз, когда вы вносите изменения, вам достаточно просто обновить связанный живой сайт, и изменения сразу отображаются.

Итак, я понял: в большинстве случаев, когда я пишу код плагина, это касается фронтенда (файлы hbs, файлы JavaScript и т. д.). Лишь небольшая часть времени уходит на бэкенд (настройка маршрутов, создание пользовательских полей и т. д.).

Вместо того чтобы писать всё вместе, я просто переношу весь фронтенд-код в компонент темы, чтобы воспользоваться преимуществами рабочего процесса компонентов темы.

Когда мне нужно обновить бэкенд-часть плагина, я снова работаю в плагине, но это занимает только около 20% времени (по крайней мере, в моей разработке плагинов). Это позволяет мне теперь 80% времени проводить с гораздо более приятным рабочим процессом компонентов темы.

Когда пришло время переносить всё в продакшн, я могу:

  • оставить компонент темы и плагин отдельно и просто использовать их оба на соответствующем сайте Discourse, или
  • если важно иметь весь код в одном месте, в этот момент перенести код компонента темы в плагин. Признаю, это может быть немного утомительно, но делать это нужно будет только один раз, когда вы готовы обновить для продакшна, при этом наслаждаясь более быстрым рабочим процессом компонентов темы.

Всё.

Не революционно. Но это значительно улучшило ситуацию с тем, что меня долгое время сбивало с толку.

Да, это хороший подход.

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

Единственная проблема этого подхода заключается в том, что если вы делитесь своим кодом и изменение API необходимо, то вам нужно убедиться, что кто-то установит оба компонента. Разделение их на две части не самый удобный способ для людей затем использовать вашу работу, поэтому я все еще считаю, что в конечном итоге установка единого плагина остается лучшим подходом для открытого исходного кода такого рода.

Если это только для вашего собственного сайта, то конечно, это отлично!

Да, безусловно, есть ситуации, когда в итоге вам нужна единая кодовая база. Моим озарением стало то, что даже если в конце я хочу иметь единую кодовую базу, я могу написать весь фронтенд в компоненте темы, а затем, когда это заработает, перенести его в плагин. Это немного утомительно, но в целом для меня это намного лучше, так как я всё ещё трачу большую часть времени на работу в рабочем процессе компонента темы.