После успешной модернизации систем сборки темы и плагинов за последний год мы готовы перейти к аналогичному обновлению ядра Discourse.
Несмотря на то, что это полная переработка системы сборки ядра, данное изменение должно быть полностью обратно совместимым. Рабочие установки Discourse не должны замечать никаких изменений. Система предварительно скомпилированных ресурсов продолжит обеспечивать то, что ваши серверы не будут сами собирать основные ресурсы.
Технологии
Мы переходим с ember-cli/webpack на rolldown — сборщик JavaScript на основе Rust. Rolldown является ядром последней версии Vite, поэтому мы находимся в отличной компании и следуем направлению развития экосистемы Ember.
Весь JavaScript в Discourse теперь собирается в нативные ES-модули, что обеспечивает улучшение производительности во время выполнения и открывает ряд возможностей для будущих оптимизаций.
Производительность сборки
В режиме разработки скорость сборки должна увеличиться примерно на 80%. На моём компьютере[1] это сократило время запуска разработки с ~30 секунд до ~5 секунд. Мы ожидаем дальнейшего улучшения производительности в будущем, поскольку некоторые части процесса сборки всё ещё опираются на устаревшие технологии, такие как Babel.
Опыт разработчика
В рамках этого перехода мы решили отказаться от использования прокси-сервера перед Discourse для разработки. Разработка теперь должна вестись напрямую через Rails-сервер.
Команда bin/ember-cli -u заменена на bin/dev. Она запустит Rails на порту :3000 и выполнит сборку rolldown в фоновом режиме. Вывод логов обоих процессов будет отображаться с соответствующим префиксом. Вам следует открыть :3000 в браузере. Порт :4200 больше не будет ничего обслуживать.
Для облегчения миграции bin/ember-cli теперь представляет собой обратно совместимую обёртку. Она выведет справочную информацию и запустит лёгкий сервер на порту :4200 с инструкциями по переходу на :3000.
Если вы предпочитаете запускать Rails и сборку JavaScript отдельными командами, вы всё ещё можете это сделать. Команды запуска Rails остались без изменений, а сборщик rolldown можно запустить в режиме наблюдения с помощью bin/dev --only ember.
Предупреждения об устаревшей сборке
Если сборка на диске была создана с помощью сборщика rolldown в режиме разработки, а процесс этого сборщика больше не запущен, Rails выдаст ошибку, предупреждая о том, что ресурсы устарели. Это касается режима разработки и системных тестов.
Эта ошибка не будет выдана, если вы используете команду одноразовой сборки (pnpm build), как это делается в CI.
Спасибо!
Эта работа стала возможной благодаря командам Ember/Embroider и The Ember Initiative. Особая благодарность @real_ate за его работу с нами над этим проектом! ![]()
MacBook Pro с чипом M3 Pro ↩︎