emdash-plugin CLI

このページ

@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

非インタラクティブ出力コマンド(whoamivalidatesearchinfologinpublish)は、マシン可読出力のために --json を受け付けます。ディスカバリーコマンド(searchinfo)は --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.jsoncsrc/plugin.tssatisfies SandboxedPlugin 形式の例のルート)、package.jsontsconfig.json、テスト、README、.gitignore。スラッグは唯一必要な入力です。スラッグだけから作成されたスキャフォールドは有効な出発点です:マニフェストには、プラグインがロードまたは公開される前に記入すべきいくつかのフィールド(パブリッシャー、著者、セキュリティ連絡先)の TODO: コメントが含まれています。

build

buildemdash-plugin.jsoncsrc/plugin.ts、およびオプションの兄弟 package.json を読み取り、以下のファイルを出力します:

アーティファクト説明
dist/plugin.mjs (+ dist/plugin.d.mts)フックとルート。インプロセスでロードされ(plugins: [])、サンドボックスローダーによってロードされます(sandboxed: [])。
dist/manifest.jsonsrc/plugin.ts から読み取られたフックとルートを含むプラグインのマニフェスト。bundle はこのファイルをそのまま含みます。npm コンシューマーは JSONC ソースを解析せずにこれを読み取ります。
dist/index.mjs (+ dist/index.d.mts)サイトが astro.config.mjs でインポートする記述子モジュール。兄弟 package.json が存在する場合にのみ出力されます。レジストリ専用プラグインはこれをスキップします。何もインポートしないためです。

dist/ はビルド出力です。コミットしないでください。スキャフォールドの .gitignore はこれを除外し、インストールがそれを再構築します。

dev

src/**emdash-plugin.jsoncpackage.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

bundlebuild の上にある薄いパッケージングステップです:

  1. dist/ を生成するために build を実行します。
  2. バンドルを検証します:Node ビルトインインポートなし、過大なファイルなし、機能の健全性。
  3. オプションのアセット(README、アイコン、スクリーンショット)を収集します。
  4. tarball を作成します。tarball 内では、plugin.mjsbackend.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 からインポートします。