@emdash-cms/plugin-cli は、オーサリングツールチェーンです:scaffold、build、watch、validate、bundle、publish、およびアイデンティティとディスカバリー。バイナリは emdash-plugin です。
コマンド
CLI は以下のコマンドを提供します:
emdash-plugin init [name] Scaffold a new sandboxed plugin
emdash-plugin build Build dist/ (plugin.mjs, manifest.json, index.mjs)
emdash-plugin dev Watch sources and rebuild on change
emdash-plugin bundle Pack dist/ + assets into a registry tarball
emdash-plugin validate [path] Validate emdash-plugin.jsonc against the schema
emdash-plugin publish --url <url> Publish a release pointing at a hosted tarball
emdash-plugin login <handle-or-did> Sign in with your Atmosphere account
emdash-plugin logout [--did <did>] Revoke the active session
emdash-plugin whoami Show stored sessions
emdash-plugin switch <did> Switch the active publisher session
emdash-plugin search <query> Free-text registry search
emdash-plugin info <handle-or-did> <slug> Show package details
非インタラクティブ出力コマンド(whoami、validate、search、info、login、publish)は、マシン可読出力のために --json を受け付けます。ディスカバリーコマンド(search、info)は --registry-url <url>(または EMDASH_REGISTRY_URL)を受け付けます。
以下の例は、ほとんどのプラグインが package.json に追加する2つのスクリプトを示しています:
{
"scripts": {
"build": "emdash-plugin build",
"dev": "emdash-plugin dev"
}
}
init
init で新しいプラグインを作成します:
npx @emdash-cms/plugin-cli init my-plugin
これは、自己完結型のプラグインを作成します:emdash-plugin.jsonc、src/plugin.ts(satisfies SandboxedPlugin 形式の例のルート)、package.json、tsconfig.json、テスト、README、.gitignore。スラッグは唯一必要な入力です。スラッグだけから作成されたスキャフォールドは有効な出発点です:マニフェストには、プラグインがロードまたは公開される前に記入すべきいくつかのフィールド(パブリッシャー、著者、セキュリティ連絡先)の TODO: コメントが含まれています。
build
build は emdash-plugin.jsonc、src/plugin.ts、およびオプションの兄弟 package.json を読み取り、以下のファイルを出力します:
| アーティファクト | 説明 |
|---|---|
dist/plugin.mjs (+ dist/plugin.d.mts) | フックとルート。インプロセスでロードされ(plugins: [])、サンドボックスローダーによってロードされます(sandboxed: [])。 |
dist/manifest.json | src/plugin.ts から読み取られたフックとルートを含むプラグインのマニフェスト。bundle はこのファイルをそのまま含みます。npm コンシューマーは JSONC ソースを解析せずにこれを読み取ります。 |
dist/index.mjs (+ dist/index.d.mts) | サイトが astro.config.mjs でインポートする記述子モジュール。兄弟 package.json が存在する場合にのみ出力されます。レジストリ専用プラグインはこれをスキップします。何もインポートしないためです。 |
dist/ はビルド出力です。コミットしないでください。スキャフォールドの .gitignore はこれを除外し、インストールがそれを再構築します。
dev
src/**、emdash-plugin.jsonc、package.json を監視し、150 ms でリビルドをデバウンスします。リビルドはシリアル化されます。失敗したリビルドでは、最後の良好な dist/ をそのまま残すため、ワークスペース/ファイルリンク経由でプラグインをインポートするサイトは、次の成功したビルドまで動作し続けます。Ctrl-C はクリーンに排出されます。
ここで pnpm dev を実行し、サイトで pnpm add file:../path/to/this を実行して、実際のサイトに対して開発します。次に、プラグインのデフォルトエクスポートを emdash({ sandboxed: [...] }) にインポートします。
validate
emdash-plugin validate # ./emdash-plugin.jsonc
emdash-plugin validate path/ # a specific directory
マニフェストのクロスフィールドルールを含む、tsc スタイルの file:line:column 診断によるオフラインスキーマチェック。ネットワークなし。プリコミットまたは CI ゲートとして適しています。マニフェストリファレンスを参照してください。
bundle
bundle は build の上にある薄いパッケージングステップです:
dist/を生成するためにbuildを実行します。- バンドルを検証します:Node ビルトインインポートなし、過大なファイルなし、機能の健全性。
- オプションのアセット(README、アイコン、スクリーンショット)を収集します。
- tarball を作成します。tarball 内では、
plugin.mjsはbackend.jsとしてパックされます(レジストリが期待するファイル名)。出力はdist/<slug>-<version>.tar.gzです。
--validate-only は tarball 作成をスキップしますが、dist/ アーティファクトは生成します —「validate」は「build first」を意味します。
publish
CLI はアーティファクトをホストしません。あなたが公開の場所でホストします。
emdash-plugin login # if not already logged in
emdash-plugin bundle # produces dist/<slug>-<version>.tar.gz
# upload that tarball to a public URL, then:
emdash-plugin publish --url https://your-host/my-plugin-1.0.0.tar.gz
publish はプロファイルフィールドのマニフェストを読み取り、パブリッシャーピンニングを強制します。最初の公開時には、--license とセキュリティ連絡先を渡します(またはマニフェストに保持します)。明示的なフラグはマニフェストの値を上書きします。これは CI で便利です。--no-manifest は完全にオプトアウトします。
完全なウォークスルー:バンドルと公開。
プログラマティック API
import { buildPlugin, bundlePlugin } from "@emdash-cms/plugin-cli";
await buildPlugin({ dir: "./my-plugin" });
const result = await bundlePlugin({ dir: "./my-plugin" });
ディスカバリーとクレデンシャルヘルパーには、@emdash-cms/registry-client からインポートします。