플러그인 게시

이 페이지

플러그인을 만든 뒤 EmDash Marketplace에 게시하면 다른 사이트가 관리 대시보드에서 설치할 수 있습니다.

사전 요건

게시 전에 플러그인이 다음을 만족하는지 확인하세요.

  • 플러그인 진입점을 가리키는 "." export가 있는 유효한 package.json
  • 고유한 id와 올바른 semver version으로 definePlugin() 사용
  • 필요한 API를 capabilities로 선언

번들 형식

게시된 플러그인은 다음을 담은 .tar.gz tarball로 배포됩니다.

파일필수설명
manifest.jsondefinePlugin()에서 추출한 플러그인 메타데이터
backend.js아니오번들된 샌드박스 코드(자체 포함 ES 모듈)
admin.js아니오번들된 관리 UI 코드
README.md아니오플러그인 문서
icon.png아니오플러그인 아이콘(256x256 PNG)
screenshots/아니오최대 5개 스크린샷(PNG/JPEG, 최대 1920x1080)

manifest.jsondefinePlugin() 호출에서 자동 생성됩니다. 플러그인 ID, 버전, capabilities, 훅 이름, 라우트 이름, 관리 설정이 포함되며 실행 코드는 없습니다.

번들 만들기

emdash plugin bundle 명령이 플러그인 소스에서 tarball을 만듭니다.

cd packages/plugins/my-plugin
emdash plugin bundle

수행 내용:

  1. package.json을 읽어 진입점을 찾습니다
  2. tsdown으로 메인 진입점을 빌드해 manifest를 추출합니다
  3. backend.js를 번들합니다(minify, tree-shake, 자체 포함)
  4. "./admin" export가 있으면 admin.js를 번들합니다
  5. 자산(README, 아이콘, 스크린샷)을 수집합니다
  6. 번들을 검증합니다(크기 제한, backend에 Node.js builtin 없음)
  7. dist/{id}-{version}.tar.gz를 씁니다

진입점 해석

bundle 명령은 package.json의 exports로 코드를 찾습니다.

{
  "exports": {
    ".": { "import": "./dist/index.mjs" },
    "./sandbox": { "import": "./dist/sandbox-entry.mjs" },
    "./admin": { "import": "./dist/admin.mjs" }
  }
}
Export용도빌드 방식
"."메인 진입점 — manifest 추출용Externals: emdash, @emdash-cms/*
"./sandbox"샌드박스에서 실행되는 백엔드 코드완전 자체 포함(externals 없음)
"./admin"관리 UI 컴포넌트완전 자체 포함

"./sandbox"가 없으면 대체로 src/sandbox-entry.ts를 찾습니다.

옵션

emdash plugin bundle [--dir <path>] [--outDir <path>]
플래그기본값설명
--dir현재 디렉터리플러그인 소스 디렉터리
--outDir, -odisttarball 출력 디렉터리

검증

bundle 명령은 다음을 확인합니다.

  • 크기 제한 — 전체 번들이 5MB 미만
  • Node.js builtin 금지backend.jsfs, path, child_process 등을 import할 수 없음(샌드박스 코드는 Node.js가 아닌 V8 isolate에서 실행)
  • 아이콘 크기icon.png는 256x256 권장(다르면 경고 후 포함)
  • 스크린샷 제한 — 최대 5개, 최대 1920x1080

게시

emdash plugin publish 명령이 tarball을 마켓플레이스에 업로드합니다.

emdash plugin publish

dist/에서 가장 최근 .tar.gz를 찾아 업로드합니다. tarball을 직접 지정하거나 게시 전에 빌드할 수도 있습니다.

# tarball 경로 명시
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz

# 먼저 빌드 후 게시
emdash plugin publish --build

인증

처음 게시할 때 CLI는 GitHub으로 인증합니다.

  1. CLI가 브라우저에서 GitHub 디바이스 인증 페이지를 엽니다
  2. 터미널에 표시된 코드를 입력합니다
  3. GitHub이 access token을 발급합니다
  4. CLI가 marketplace JWT로 교환합니다(~/.config/emdash/auth.json에 저장)

토큰은 30일간 유효합니다. 만료 후 다음 publish 시 재인증을 요청받습니다.

인증은 별도로 관리할 수 있습니다.

# 게시 없이 로그인
emdash plugin login

# 로그아웃(저장된 토큰 삭제)
emdash plugin logout

최초 등록

플러그인 ID가 마켓플레이스에 아직 없으면 emdash plugin publish가 첫 버전 업로드 전에 자동 등록합니다.

버전 요구사항

게시하는 각 버전은 이전보다 높은 semver여야 합니다. 기존 버전을 덮어쓰거나 다시 게시할 수 없습니다.

보안 감사

게시되는 각 버전은 자동 보안 감사를 거칩니다. 마켓플레이스는 backend.jsadmin.js를 스캔하여 다음을 찾습니다.

  • 데이터 유출 패턴
  • 설정을 통한 자격 증명 수집
  • 난독화 코드
  • 리소스 남용(암호화폐 채굴 등)
  • 의심스러운 네트워크 활동

감사는 pass, warn, fail 판정을 내리며 플러그인 마켓플레이스 목록에 표시됩니다. 마켓플레이스 enforcement 수준에 따라 fail은 게시 전체를 막을 수 있습니다.

옵션

emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
플래그기본값설명
--tarballdist/의 최신 .tar.gztarball 명시 경로
--buildfalse게시 전 emdash plugin bundle 실행
--dir현재 디렉터리플러그인 디렉터리(--build와 함께)
--registryhttps://marketplace.emdashcms.com마켓플레이스 URL

전체 워크플로

일반적인 게시 주기:

# 1. 변경 사항 적용
# 2. definePlugin()과 package.json에서 버전 올리기
# 3. 한 번에 번들 + 게시
emdash plugin publish --build

번들을 먼저 확인하려면:

# tarball 빌드
emdash plugin bundle

# 출력 확인
tar tzf dist/my-plugin-1.1.0.tar.gz

# 게시
emdash plugin publish