Publicar plugins
Una vez que hayas construido un plugin, puedes publicarlo en el Marketplace de EmDash para que otros sitios puedan instalarlo desde el panel de administración.
Requisitos previos
Sección titulada «Requisitos previos»Antes de publicar, asegúrate de que tu plugin:
- Tenga un
package.jsonválido con la exportación"."apuntando a la entrada de tu plugin - Use
definePlugin()con unidúnico y unaversionsemver válida - Declare sus
capabilities(a qué APIs necesita acceso)
Formato del paquete
Sección titulada «Formato del paquete»Los plugins publicados se distribuyen como archivos .tar.gz que contienen:
| Archivo | Requerido | Descripción |
|---|---|---|
manifest.json | Sí | Metadatos del plugin extraídos de definePlugin() |
backend.js | No | Código del sandbox empaquetado (módulo ES autocontenido) |
admin.js | No | Código de la interfaz de administración empaquetado |
README.md | No | Documentación del plugin |
icon.png | No | Icono del plugin (PNG 256x256) |
screenshots/ | No | Hasta 5 capturas de pantalla (PNG/JPEG, máximo 1920x1080) |
El manifest.json se genera automáticamente a partir de tu llamada a definePlugin(). Contiene el ID del plugin, la versión, las capacidades, los nombres de los hooks, los nombres de las rutas y la configuración de administración, pero no código ejecutable.
Construir un Paquete
Sección titulada «Construir un Paquete»El comando emdash plugin bundle produce un archivo comprimido a partir del código fuente de tu plugin:
cd packages/plugins/my-pluginemdash plugin bundleEsto hará:
- Leer tu
package.jsonpara encontrar los puntos de entrada - Construir la entrada principal con tsdown para extraer el manifiesto
- Empaquetar
backend.js(minificado, con tree-shaking, autocontenido) - Empaquetar
admin.jssi existe una exportación"./admin" - Recopilar recursos (README, icono, capturas de pantalla)
- Validar el paquete (límites de tamaño, sin built-ins de Node.js en backend)
- Escribir
{id}-{version}.tar.gzendist/
Resolución del Punto de Entrada
Sección titulada «Resolución del Punto de Entrada»El comando bundle encuentra tu código a través de las exportaciones de package.json:
{ "exports": { ".": { "import": "./dist/index.mjs" }, "./sandbox": { "import": "./dist/sandbox-entry.mjs" }, "./admin": { "import": "./dist/admin.mjs" } }}| Exportación | Propósito | Construido como |
|---|---|---|
"." | Entrada principal — usada para extraer el manifiesto | Externos: emdash, @emdash-cms/* |
"./sandbox" | Código backend que se ejecuta en el sandbox | Completamente autocontenido (sin externos) |
"./admin" | Componentes de la interfaz de administración | Completamente autocontenido |
Si falta "./sandbox", el comando busca src/sandbox-entry.ts como alternativa.
Opciones
Sección titulada «Opciones»emdash plugin bundle [--dir <path>] [--outDir <path>]| Bandera | Valor por defecto | Descripción |
|---|---|---|
--dir | Directorio actual | Directorio fuente del plugin |
--outDir, -o | dist | Directorio de salida para el archivo comprimido |
Validación del bundle
Sección titulada «Validación del bundle»El comando bundle verifica:
- Límite de tamaño — El paquete total debe ser menor a 5MB
- Sin built-ins de Node.js —
backend.jsno puede importarfs,path,child_process, etc. (el código del sandbox se ejecuta en un aislado V8, no en Node.js) - Dimensiones del icono —
icon.pngdebe ser 256x256 (advierte si es incorrecto, pero aún lo incluye) - Límites de capturas de pantalla — Máximo 5 capturas, máximo 1920x1080
Publicación
Sección titulada «Publicación»El comando emdash plugin publish sube tu archivo comprimido al marketplace:
emdash plugin publishEsto buscará el archivo .tar.gz más reciente en tu directorio dist/ y lo subirá. También puedes especificar el archivo explícitamente o construir antes de publicar:
# Ruta explícita del archivo `.tar.gz`emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz
# Construir primero, luego publicaremdash plugin publish --buildAutenticación
Sección titulada «Autenticación»La primera vez que publiques, la CLI te autenticará a través de GitHub:
- La CLI abre tu navegador a la página de autorización de dispositivos de GitHub
- Ingresas el código mostrado en tu terminal
- GitHub emite un token de acceso
- La CLI lo intercambia por un JWT del marketplace (almacenado en
~/.config/emdash/auth.json)
El token dura 30 días. Una vez que expire, se te pedirá que te reautentiques en la próxima publicación.
También puedes gestionar la autenticación por separado:
# Iniciar sesión sin publicaremdash plugin login
# Cerrar sesión (borrar el token almacenado)emdash plugin logoutRegistro por Primera Vez
Sección titulada «Registro por Primera Vez»Si tu ID de plugin aún no existe en el marketplace, emdash plugin publish lo registra automáticamente antes de subir la primera versión.
Requisitos de Versión
Sección titulada «Requisitos de Versión»Cada versión publicada debe tener un número semver mayor que la anterior. No puedes sobrescribir o republicar una versión existente.
Auditoría de Seguridad
Sección titulada «Auditoría de Seguridad»Cada versión publicada pasa por una auditoría de seguridad automatizada. El marketplace escanea tu backend.js y admin.js en busca de:
- Patrones de exfiltración de datos
- Recolección de credenciales a través de configuraciones
- Código ofuscado
- Abuso de recursos (minería de criptomonedas, etc.)
- Actividad de red sospechosa
La auditoría produce un veredicto de aprobado, advertencia o fallo, que se muestra en la lista del plugin en el marketplace. Dependiendo del nivel de cumplimiento del marketplace, un veredicto de fallo puede bloquear la publicación por completo.
Opciones
Sección titulada «Opciones»emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]| Bandera | Valor por defecto | Descripción |
|---|---|---|
--tarball | Último .tar.gz en dist/ | Ruta explícita del archivo comprimido |
--build | false | Ejecutar emdash plugin bundle antes de publicar |
--dir | Directorio actual | Directorio del plugin (usado con --build) |
--registry | https://marketplace.emdashcms.com | URL del marketplace |
Flujo de trabajo completo
Sección titulada «Flujo de trabajo completo»Este es el ciclo típico de publicación:
# 1. Haz tus cambios# 2. Incrementa la versión en definePlugin() y package.json# 3. Empaqueta y publica en un solo pasoemdash plugin publish --buildO si prefieres inspeccionar el paquete primero:
# Generar el archivo comprimidoemdash plugin bundle
# Verificar la salidatar tzf dist/my-plugin-1.1.0.tar.gz
# Publicaremdash plugin publish