Ordem de precedência dos componentes do tema

Sempre que você criar ou instalar um tema ou componente, o Discourse atribuirá um ID a ele. Se você visitar a página desse componente, deverá ver esse ID na URL (o número no final)

component id in the URL

Quando esse componente é adicionado ao seu tema, sua ordem de execução parece ser baseada no seu ID — em um nível muito básico (fazendo um console.log sem qualquer adiamento). Assim, o 233 será executado antes do 234, e assim por diante.

Isso funciona na maioria dos casos porque alterações subsequentes geralmente são adicionadas em novos componentes, então simplesmente funciona.

A longo prazo, poderíamos fazer com que a ordem respeite a lista de componentes que você adicionou ao tema

mas isso não está em nenhum roteiro no momento.

O que você realmente precisa é da ordem dos inicializadores. Não acho que seja possível fazer isso a menos que você mova seu código para o novo modo de criar JS de tema. Esse método permite que você dê um nome ao inicializador e defina a ordem de execução. Por exemplo, digamos que eu tenha este arquivo

/javascripts/discourse/initializers/initialize-for-foo.js

e ele se pareça com isso

import { withPluginApi } from "discourse/lib/plugin-api";

export default {
  name: "foo",
  initialize() {
    withPluginApi("0.8.7", api => {
      console.log("foo")
    });
  }
}

e eu tenha outro inicializador que se pareça com isso

/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")
    });
  }
}

Se eu quiser garantir que bar seja executado após foo, posso adicionar um argumento after: a ele, o que garantirá que ele seja executado após o nome do inicializador que eu passar ali. Então, para fazer bar ser executado após foo, eu faria isso em

/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");
    });
  }
};