テーマまたはコンポーネントを作成・インストールするたびに、Discourse はそれに ID を割り当てます。そのコンポーネントのページにアクセスすると、URL の末尾(最後の数字)にその ID が表示されているはずです。

そのコンポーネントがテーマに追加されると、その実行順序は基本的に ID に基づいて決まります(遅延なしでコンソールログを出力する場合など)。つまり、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 の後に実行させるには、initialize-for-bar.js ファイルで以下のようにします。
/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");
});
}
};