EmberCLI: Скоро появится в вашем Discourse!

Мы хотели бы перенести конвейер ассетов Discourse на использование EmberCLI. EmberCLI — это стандартный способ разработки приложений на Ember, и подход, принятый в Discourse, уже давно вызывает путаницу у разработчиков, приходящих в наш проект с опытом работы с Ember.js.

Предыстория

Discourse существует достаточно давно, чтобы появиться ещё до возникновения EmberCLI; в то время использование аналогов конвейера ассетов Rails считалось лучшей практикой. За эти годы мы добавили в наше приложение на Ember всё больше и больше компонентов: модули JavaScript, Babel.js и карты исходного кода (source maps). Однако мы считаем, что возможности конвейера ассетов Rails исчерпаны. Некоторые новые функции, такие как async/await, крайне сложно интегрировать в нашу текущую систему.

В следующей основной версии Discourse (2.5) мы планируем перейти на EmberCLI. Этот процесс займёт довольно много времени, поэтому мы сделаем всё возможное, чтобы поддерживать работоспособность двух версий нашего фронтенд-приложения. Смелые пользователи смогут включить поддержку EmberCLI, а остальные смогут продолжать использовать приложение «как есть», пока мы не достигнем точки стабильности.

Дорожная карта

  1. Перенос существующих паттернов на паттерны EmberCLI: Мы уже начали этот процесс в версии 2.4. Основная цель — постепенно перевести наш JavaScript-код в формат, максимально близкий к тому, который ожидает Ember-CLI. Это включает:

    • импорт всего из одинаковых путей;
    • использование различных расширений для «сырых» Handlebars и Handlebars для Ember;
    • устранение устареваний вычисляемых свойств (computed properties);
    • переход с нашего кастомного модуля на модуль Location из Ember.
  2. Запуск Discourse через EmberCLI: Вероятно, это потребует поиска новых проблем по мере исправления пунктов из (1) и повторения того же подхода.

  3. Интеграция компонентов тем и плагинов: Нам потребуется провести исследование, чтобы максимально бесшовно интегрировать существующие расширения для Discourse.

  4. Выявление узких мест (по производительности или другим параметрам): Система должна работать так же быстро, как и текущая, или быстрее.

  5. Определение графика перехода: Он должен быть достаточно длительным, чтобы у пользователей было много времени на бета-тестирование функции и предоставление обратной связи.

Преимущества

После полного перехода многие функции, которые сейчас не работают или сложны в реализации, такие как карты исходного кода и async/await, должны начать работать корректно.

Кроме того, для некоторых разработчиков, желающих работать только над фронтендом Discourse, мы сможем настроить окружение так, чтобы они могли запускать EmberCLI, указывая его на сервер вроде try.discourse.org, и разрабатывать фронтенд-приложение без необходимости запуска полного Ruby/Rails-сервера с Redis и Postgres.

Это будет масштабный проект, но в итоге наше приложение станет значительно лучше!

Спасибо, Робин! Этот приоритет для нас, конечно, очень важен.

Пожалуйста, дайте знать, если вы хотите, чтобы мы протестировали какие-либо ветки.

P.S. Я могу только представить, сколько работы потребует эта миграция, поэтому огромное спасибо.

Вы тоже планируете в будущем сделать плагины Discourse плагинами Rails? Это было бы здорово! :smiley: В Rails есть множество генераторов для плагинов, которые доступны из коробки. Кроме того, Discourse — это самое крупное приложение на Rails с открытым исходным кодом, поэтому, возможно, стоит объединить усилия.

Это совершенно другой и гораздо более сложный запрос, который не должен быть связан с этой работой.

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

Сегодня я объединил большой коммит, который переименовывает все файлы .js.es6 в папке app/assets/javascripts/discourse в .js. Это шаг к соответствию стандартному способу именования файлов в Ember CLI.

Далее следует поддержка плагинов для транспиляции .js и устаревание .es6.

Привет @eviltrout

Я только что наткнулся на это. Как продвигается работа над этим? :slight_smile:

Отлично. @eviltrout только что несколько дней назад объединил этот коммит: DEV: Migrate to Ember CLI (#11932) · discourse/discourse@61f5d50 · GitHub Это огромный шаг вперёд в этом направлении.

Прекрасно. Очень рад этому. @angus @merefield тоже бы это понравилось. :heart:

Да, вы можете запустить Ember CLI в режиме разработки прямо сейчас! Скорее всего, я опубликую больше информации об этом вскоре, когда инструмент станет немного удобнее в использовании.

С нетерпением жду этого :slight_smile: