Порядок приоритета компонентов темы

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

component id in the 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");
    });
  }
};