Мы создали пользовательскую директиву Sprockets для плагина Custom Wizard

Плагин Custom Wizard создаёт собственное приложение Ember и использует некоторые ресурсы из ядра Discourse.

Для этого мы используем файл wizard-custom.js с директивами Sprockets, указывающими на отдельные файлы.

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

  • Файл wizard-custom.js находится внутри плагина, поэтому его load path отличается от пути ядра Discourse, и мы можем подключать только файлы, находящиеся внутри этого пути.
  • Sprockets не поддерживает абсолютные пути при использовании require_tree.

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

Чтобы смягчить эту проблему, мы создали собственную директиву Sprockets под названием require_tree_discourse, которая специально ищет ресурсы внутри папки Discourse, используя абсолютные пути. Вот ссылка на PR с этим кодом:

Думаю, это может быть интересно разработчикам Discourse и разработчикам Rails в целом.

К сожалению, нам пришлось откатить это изменение, так как оно не работает в продакшене.

Похоже, плагины загружаются чуть позже, чем считываются JS-файлы.

Это работает. Мы скоро вернем это изменение.

Мы наконец-то внедрили это в наш код.

Имейте в виду: я оцениваю, что в течение 12 месяцев мы откажемся от sprockets в пользу сборок на основе ember-cli. @eviltrout уже начал работу по изучению этого перехода.

Спасибо за раннее предупреждение. Любые подсказки в этом направлении будут очень полезны. cc @angus