Мы хотели бы перенести конвейер ассетов Discourse на использование EmberCLI. EmberCLI — это стандартный способ разработки приложений на Ember, и подход, принятый в Discourse, уже давно вызывает путаницу у разработчиков, приходящих в наш проект с опытом работы с Ember.js.
Предыстория
Discourse существует достаточно давно, чтобы появиться ещё до возникновения EmberCLI; в то время использование аналогов конвейера ассетов Rails считалось лучшей практикой. За эти годы мы добавили в наше приложение на Ember всё больше и больше компонентов: модули JavaScript, Babel.js и карты исходного кода (source maps). Однако мы считаем, что возможности конвейера ассетов Rails исчерпаны. Некоторые новые функции, такие как async/await, крайне сложно интегрировать в нашу текущую систему.
В следующей основной версии Discourse (2.5) мы планируем перейти на EmberCLI. Этот процесс займёт довольно много времени, поэтому мы сделаем всё возможное, чтобы поддерживать работоспособность двух версий нашего фронтенд-приложения. Смелые пользователи смогут включить поддержку EmberCLI, а остальные смогут продолжать использовать приложение «как есть», пока мы не достигнем точки стабильности.
Дорожная карта
-
Перенос существующих паттернов на паттерны EmberCLI: Мы уже начали этот процесс в версии 2.4. Основная цель — постепенно перевести наш JavaScript-код в формат, максимально близкий к тому, который ожидает Ember-CLI. Это включает:
- импорт всего из одинаковых путей;
- использование различных расширений для «сырых» Handlebars и Handlebars для Ember;
- устранение устареваний вычисляемых свойств (computed properties);
- переход с нашего кастомного модуля на модуль
Locationиз Ember.
-
Запуск Discourse через EmberCLI: Вероятно, это потребует поиска новых проблем по мере исправления пунктов из (1) и повторения того же подхода.
-
Интеграция компонентов тем и плагинов: Нам потребуется провести исследование, чтобы максимально бесшовно интегрировать существующие расширения для Discourse.
-
Выявление узких мест (по производительности или другим параметрам): Система должна работать так же быстро, как и текущая, или быстрее.
-
Определение графика перехода: Он должен быть достаточно длительным, чтобы у пользователей было много времени на бета-тестирование функции и предоставление обратной связи.
Преимущества
После полного перехода многие функции, которые сейчас не работают или сложны в реализации, такие как карты исходного кода и async/await, должны начать работать корректно.
Кроме того, для некоторых разработчиков, желающих работать только над фронтендом Discourse, мы сможем настроить окружение так, чтобы они могли запускать EmberCLI, указывая его на сервер вроде try.discourse.org, и разрабатывать фронтенд-приложение без необходимости запуска полного Ruby/Rails-сервера с Redis и Postgres.
Это будет масштабный проект, но в итоге наше приложение станет значительно лучше!