テーマやプラグインを`.gjs`に切り替えるタイミングは?

これは、現在のように、テーマコンポーネントに依存しない一般的な方法で行う必要があると思います。

この手法を使用する別のテーマコンポーネントがあります。

これは私の側からの少なくとも2つであり、さらに増える可能性があります。

「いいね!」 3

同意します。パッケージにバンドルするのではなく、それぞれが独立したブロックコンポーネントのコレクションを構築しました: https://gitlab.com/manuelkostka/discourse/blocks。

現在、Homepage Blocks コンポーネントを使用してこれらのブロックを専用のホームページに配置できます。Right Sidebar Blocks や Bars で使用することもできます。

最近、カスタムサイドバーレイアウトが必要な Central テーマで実験を行いました。カスタムサイドバー用のブロックフレームワークを簡単に構築し、そこにブロックコンポーネントを配置できました: https://central.kostka.studio (また、Powered-by-discourse コンポーネントを名前で参照するだけでサイドバーに配置することもできます)。

スタンドアロンのブロックコンポーネントは、クライアントのカスタマイズを柔軟かつ保守可能なアプローチで構築するための最も役立つツールです。これをサポートするための一般的な道筋があれば素晴らしいでしょう。

「いいね!」 3

これを再度取り上げたいと思います。コンポーネントの最適な処理方法を考えているのですが、現在、どちらも大きな欠点がある2つの選択肢があります。ブロックをレンダリングするテーマコンポーネントごとにレジストリを作成できますが、それはモジュラーの目的を損なうようなものです。または、プラグインを通じてグローバルに追加しますが、そうするとコンポーネントはそのプラグインがインストールされているかどうかに依存することになります。

そのため、コアにグローバルなブロック登録APIがあれば、非常に役立つと思われます。テーマコンポーネントがブロックレンダリングを呼び出すため、また新しいブロックを登録するために使用できるものです。

ブロックアプローチで作業するのが好きなのは、アプリのレイアウトとコンポーネントのコンテンツの間で関心を分割できるからです。ブロックコンポーネントはコンテンツのレンダリングのみを処理し、その後アプリの別のコンポーネントによってレンダリングされます。ブロックコンポーネントからルートとアウトレットのロジックをすべて削除でき、同じブロックをレイアウト上、さらにはアプリ全体で複数回簡単に再利用できます。

すべてがよりスリムで再利用可能になり、全体的にエレガントなアプローチになると考えています。Discourseでこのパターンをしっかりとサポートできれば素晴らしいでしょう。

「いいね!」 4

デビッド、あるプラグイン/コンポーネントで利用するために、「クロステーマ/プラグイン」コンポーネントを登録するための裁量的なAPIを持つことは実現可能でしょうか?

そうすれば、すべてを登録することを避けつつ、明示的にそれを可能にする柔軟性を提供できます。

「いいね!」 2

この件に関して、汎用的なAPIについては確信が持てません。コンポーネントの使用方法はあまりにも多く、それぞれ引数やロードタイミングに関して異なる期待があるためです。

お客様のユースケースでは、テーマ/プラグイン固有のレジストリで対応可能でしょうか?上記のモックアップ(right-sidebar-blocks用)のようなものでしょうか?

もしそうでない場合は、具体的な例をいくつか提供していただけると、どのようなAPIが必要なのかを正確に把握するのに役立ちます。CDCKが保守するすべてのテーマとプラグインはgjsに移行されており、この問題(right-sidebar-blocksのような特定のケースを除いて)には遭遇していません。

「いいね!」 1

はい、実は、ドラフトPRで書かれたことをより注意深く読み返すと、これが十分良い解決策であると信じるようになります。具体的には:

「このコミットは、右サイドバーブロックコンポーネント専用のリストを導入し、他のテーマ/プラグインが追加のコンポーネントを登録できるようにします。」

これが重要だと思います。あるテーマと互換性があるとしてリモートで登録し、その後「マスター」テーマがリモートで登録された要素を組み込むことができるようにすることは、まさに私が求めていることなので、あなたはすでにこれが可能であることを示していると思います。

「いいね!」 1

素晴らしい!

ごく簡単なケースでは、「マスター」テーマに PluginOutlet を追加するだけで済む場合もあり、他のテーマは renderInOutlet (または connectors/... にファイルを配置する) ことができます。

「いいね!」 2

これも真実です。しかし、あなたのレジストリパターンは本当に気に入っています、とても良いですね。実際、RSB(Barsはすでに同じパラメータシステムを使用しています)との互換性を維持できると良いでしょう。そうすればシステム全体が相互運用可能になります(ただし、2つの初期化子は課題になるかもしれません。あるいは、RSBレイヤーをオフに切り替えられれば、追加の初期化子は必要ないかもしれません。そうすればRSB全体をロードして再利用できますね :thinking:)。