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

**URL:** https://meta.discourse.org/t/we-created-a-custom-sprockets-directive-for-the-custom-wizard-plugin/189908
**Category:** Development
**Created:** [10.Май.2021 07:27:39 UTC](https://meta.discourse.org/t/we-created-a-custom-sprockets-directive-for-the-custom-wizard-plugin/189908 "2021-05-10T07:27:39Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [10.Май.2021 07:27:39 UTC](https://meta.discourse.org/t/we-created-a-custom-sprockets-directive-for-the-custom-wizard-plugin/189908/1 "2021-05-10T07:27:39Z")

</div>

Плагин 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 в целом.

> <https://github.com/paviliondev/discourse-custom-wizard/pull/86>

---

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [13.Май.2021 10:48:47 UTC](https://meta.discourse.org/t/we-created-a-custom-sprockets-directive-for-the-custom-wizard-plugin/189908/2 "2021-05-13T10:48:47Z")

</div>

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

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

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

---

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [28.Июнь.2021 12:44:20 UTC](https://meta.discourse.org/t/we-created-a-custom-sprockets-directive-for-the-custom-wizard-plugin/189908/3 "2021-06-28T12:44:20Z")

</div>

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

> <https://github.com/paviliondev/discourse-custom-wizard/pull/114>

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [29.Июнь.2021 02:10:20 UTC](https://meta.discourse.org/t/we-created-a-custom-sprockets-directive-for-the-custom-wizard-plugin/189908/4 "2021-06-29T02:10:20Z")

</div>

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

---

<div class="post-metadata">

### Author: ![fzngagan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/fzngagan/32/259349_2.png) [@fzngagan](https://meta.discourse.org/u/fzngagan)
#### Post date: [29.Июнь.2021 05:45:41 UTC](https://meta.discourse.org/t/we-created-a-custom-sprockets-directive-for-the-custom-wizard-plugin/189908/5 "2021-06-29T05:45:41Z")

</div>

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