Каждый раз при создании или установке темы или компонента Discourse присваивает ему уникальный идентификатор. Если вы перейдёте на страницу этого компонента, то увидите этот идентификатор в URL (число в конце).

Когда компонент добавляется в вашу тему, порядок его выполнения, по-видимому, определяется его идентификатором — на очень базовом уровне (например, при выводе в консоль без отложенного выполнения). Таким образом, 233 будет выполнен раньше, чем 234, и так далее.
В большинстве случаев это работает, поскольку последующие изменения обычно добавляются в новые компоненты, поэтому всё функционирует корректно.
В долгосрочной перспективе мы можем сделать так, чтобы порядок выполнения соответствовал порядку списка компонентов, добавленных в тему.
но на данный момент это не входит в план работ.
Вам действительно нужен порядок инициализаторов. Я не думаю, что это можно сделать, если не перейти к новому способу создания JavaScript-кода темы. Этот метод позволяет задать имя и порядок выполнения инициализатора. Например, допустим, у меня есть файл
/javascripts/discourse/initializers/initialize-for-foo.js
с следующим содержимым:
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("foo");
});
}
}
и у меня есть другой инициализатор:
/javascripts/discourse/initializers/initialize-for-bar.js
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "bar",
initialize() {
withPluginApi("0.8.7", api => {
console.log("bar");
});
}
}
Если я хочу убедиться, что bar выполняется после foo, я могу добавить аргумент after: к нему. Это обеспечит выполнение после инициализатора с указанным именем. Таким образом, чтобы bar выполнялся после foo, я должен сделать следующее в файле
/javascripts/discourse/initializers/initialize-for-bar.js
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "bar",
+ after: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("bar");
});
}
};