emdash-plugin CLI

이 페이지

@emdash-cms/plugin-cli는 작성 툴체인입니다: scaffold, build, watch, validate, bundle, publish, 그리고 ID 및 검색 기능. 바이너리는 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에 추가하는 두 가지 스크립트를 보여줍니다:

{
	"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

buildemdash-plugin.jsonc, src/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을 감시하고 150ms마다 재빌드를 디바운스합니다. 재빌드는 직렬화됩니다. 실패한 재빌드 시 마지막으로 정상적인 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에서 가져옵니다.