ローカルプラグインの開発
riebeckite plugin dev は、ローカルのプラグインパッケージを一時的な Riebeckite サイトで実行します。実際の PluginRuntime、HonoX、Vite を使うため、サイトと同じ Markdown パイプライン、CSS、クライアントエントリーを確認できます。
使う場面
プラグインの変換処理、スタイル、クライアントの挙動を変更し、ブラウザーで結果を確認したいときに使います。theme preview との違いは次のとおりです。
plugin devはローカルのパスから 1 つのプラグインを読み込み、そのクライアントエントリーを実行します。theme previewは固定のテスト用コンテンツでテーマを確認します。plugin devはプラグイン用の一時サイトを生成します。
プレビューを開始する
プラグインパッケージ内、またはパスを指定して実行します。
riebeckite plugin dev ./extensions/my-plugin
riebeckite plugin dev ../my-plugin --port 4321 --no-open
| オプション | 意味 |
|---|---|
<path> |
プラグインのディレクトリ、またはその package.json |
--port <port> |
開発サーバーのポート |
--no-open |
ブラウザーを自動で開かない |
プラグインのディレクトリには有効な package.json が必要です。エントリーポイントは exports["."] の source、import、module、default、main、慣例的な index.ts の順で解決します。./client や ./style.css などのエクスポートサブパスは、対応するローカルファイルが存在する場合に結び付けます。
プレビューの前に、プラグイン側のプロジェクトで依存関係をインストールしてください。コマンドが依存パッケージを自動でインストールすることはありません。
テスト用サイト
システムの一時ディレクトリに最小構成の HonoX サイトを作成し、ローカルプラグインをリンクしてからテスト用データのパスを表示します。テスト用データには見出しとタブ付きコードブロックを含む決定的な Markdown を書き込みます。設定済みの Vault、riebeckite.config.ts、ビルド出力は読み書きしません。
生成するサイトでは既定のテーマと、Markdown、カラーモード、目次の標準プラグインを使い、その後にローカルプラグインを加えます。プロジェクトの設定をコピーせず、通常のサイトに近い構成で確認できます。
編集中の更新
| 変更 | 結果 |
|---|---|
| プラグインの CSS | Vite HMR が開いているページを更新する |
| プラグインのクライアントエントリー | プレビューを再読み込みし、新しいクライアントコードを実行する |
| テスト用データの Markdown | 描画結果を更新する |
| プラグインのエントリーポイント | 開発サーバーを再起動する |
変更を反映できない場合は、成功したように見せずターミナルにエラーを表示します。コンパイルや初期化に失敗した場合は 0 以外の終了ステータスで終了します。
エラーと後片付け
パスが見つからない場合、package.json が不正な場合、エントリーポイントに対応していない場合、プラグインの初期化に失敗した場合は、プレビューが使える状態になる前にエラーを表示します。Ctrl+C、通常終了、起動失敗のいずれでも一時サイトを削除します。プロセスを強制終了した場合は、起動時に表示されたテスト用データのパスを手動で削除してください。
セキュリティ
plugin dev は信頼できるローカル開発向けのコマンドです。指定したパスのプラグインエントリーとクライアントコードを実行します。信頼できるプラグインだけを実行し、プレビューサーバーを信頼できない利用者へ公開しないでください。
トラブルシューティング
Could not find a plugin: パスを確認してください。相対パスはカレントディレクトリから解決します。Could not find package.json: パッケージのルート、またはそのpackage.jsonを指定してください。Could not find the plugin entry point:exports["."]、main、またはindex.tsを追加してください。- Vite がコンパイルエラーを表示する: プラグインの依存関係をインストールし、ターミナルの出力を確認してください。
- ポートが使用中: 別の
--portを指定してください。