Publication de Plugins
Une fois que vous avez créé un plugin, vous pouvez le publier sur le Marketplace EmDash pour que d’autres sites puissent l’installer depuis le tableau de bord d’administration.
Prérequis
Section intitulée « Prérequis »Avant de publier, assurez-vous que votre plugin :
- Possède un
package.jsonvalide avec l’export"."pointant vers l’entrée de votre plugin - Utilise
definePlugin()avec unidunique et uneversionsemver valide - Déclare ses
capabilities(quelles API il nécessite d’accéder)
Format du Bundle
Section intitulée « Format du Bundle »Les plugins publiés sont distribués sous forme d’archives .tar.gz contenant :
| Fichier | Requis | Description |
|---|---|---|
manifest.json | Oui | Métadonnées du plugin extraites de definePlugin() |
backend.js | Non | Code du sandbox empaqueté (module ES autonome) |
admin.js | Non | Code de l’interface d’administration empaqueté |
README.md | Non | Documentation du plugin |
icon.png | Non | Icône du plugin (PNG 256x256) |
screenshots/ | Non | Jusqu’à 5 captures d’écran (PNG/JPEG, max 1920x1080) |
Le manifest.json est généré automatiquement à partir de votre appel definePlugin(). Il contient l’ID du plugin, la version, les capacités, les noms des hooks, les noms des routes et la configuration d’administration — mais aucun code exécutable.
Construction d’un Bundle
Section intitulée « Construction d’un Bundle »La commande emdash plugin bundle produit une archive à partir de votre code source de plugin :
cd packages/plugins/my-pluginemdash plugin bundleCela va :
- Lire votre
package.jsonpour trouver les points d’entrée - Construire l’entrée principale avec tsdown pour extraire le manifeste
- Empaqueter
backend.js(minifié, élagué, autonome) - Empaqueter
admin.jssi un export"./admin"existe - Collecter les ressources (README, icône, captures d’écran)
- Valider le bundle (limites de taille, pas de modules intégrés Node.js dans backend)
- Écrire
{id}-{version}.tar.gzdansdist/
Résolution du Point d’Entrée
Section intitulée « Résolution du Point d’Entrée »La commande bundle trouve votre code via les exports de package.json :
json title="package.json"{ "exports": { ".": { "import": "./dist/index.mjs" }, "./sandbox": { "import": "./dist/sandbox-entry.mjs" }, "./admin": { "import": "./dist/admin.mjs" } }}| Export | Objectif | Construit comme |
|---|---|---|
"." | Entrée principale — utilisée pour extraire le manifeste | Externes : emdash, @emdash-cms/* |
"./sandbox" | Code backend qui s’exécute dans le sandbox | Complètement autonome (pas d’externes) |
"./admin" | Composants de l’interface d’administration | Complètement autonome |
Si "./sandbox" est manquant, la commande cherche src/sandbox-entry.ts comme solution de repli.
emdash plugin bundle [--dir <path>] [--outDir <path>]| Option | Par défaut | Description |
|---|---|---|
--dir | Répertoire courant | Répertoire source du plugin |
--outDir, -o | dist | Répertoire de sortie pour l’archive |
Validation
Section intitulée « Validation »La commande bundle vérifie :
- Limite de taille — Le bundle total doit être inférieur à 5 Mo
- Pas de modules intégrés Node.js —
backend.jsne peut pas importerfs,path,child_process, etc. (le code du sandbox s’exécute dans un isolat V8, pas Node.js) - Dimensions de l’icône —
icon.pngdoit être de 256x256 (avertit si incorrect, l’inclut quand même) - Limites des captures d’écran — Max 5 captures d’écran, max 1920x1080
Publication
Section intitulée « Publication »La commande emdash plugin publish téléverse votre archive sur le marketplace :
emdash plugin publishCela trouvera l’archive .tar.gz la plus récente dans votre répertoire dist/ et la téléversera. Vous pouvez également spécifier l’archive explicitement ou construire avant de publier :
# Explicit tarball pathemdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz
# Construire d'abord, puis publieremdash plugin publish --buildAuthentification
Section intitulée « Authentification »La première fois que vous publiez, le CLI vous authentifie via GitHub :
- Le CLI ouvre votre navigateur vers la page d’autorisation d’appareil de GitHub
- Vous entrez le code affiché dans votre terminal
- GitHub émet un jeton d’accès
- Le CLI l’échange contre un JWT du marketplace (stocké dans
~/.config/emdash/auth.json)
Le jeton dure 30 jours. Après son expiration, vous serez invité à vous ré-authentifier lors de la prochaine publication.
Vous pouvez également gérer l’authentification séparément :
# Log in without publishingemdash plugin login
# Se déconnecter (effacer le jeton stocké)emdash plugin logoutEnregistrement pour la Première Fois
Section intitulée « Enregistrement pour la Première Fois »Si votre ID de plugin n’existe pas encore dans le marketplace, emdash plugin publish l’enregistre automatiquement avant de téléverser la première version.
Exigences de Version
Section intitulée « Exigences de Version »Chaque version publiée doit avoir un numéro semver supérieur à la précédente. Vous ne pouvez pas écraser ou republier une version existante.
Audit de Sécurité
Section intitulée « Audit de Sécurité »Chaque version publiée passe par un audit de sécurité automatisé. Le marketplace analyse votre backend.js et admin.js pour :
- Modèles d’exfiltration de données
- Collecte d’identifiants via les paramètres
- Code obfusqué
- Abus de ressources (minage de crypto, etc.)
- Activité réseau suspecte
L’audit produit un verdict de pass, warn ou fail, qui est affiché sur la fiche du plugin dans le marketplace. Selon le niveau d’application du marketplace, un verdict fail peut bloquer la publication entièrement.
emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]| Option | Par défaut | Description |
|---|---|---|
--tarball | Dernier .tar.gz dans dist/ | Chemin explicite de l’archive |
--build | false | Exécuter emdash plugin bundle avant de publier |
--dir | Répertoire courant | Répertoire du plugin (utilisé avec --build) |
--registry | https://marketplace.emdashcms.com | URL du marketplace |
Flux de Travail Complet
Section intitulée « Flux de Travail Complet »Voici le cycle de publication typique :
# 1. Make your changes# 2. Bump the version in definePlugin() and package.json# 3. Bundle and publish in one stepemdash plugin publish --buildOu si vous préférez inspecter le bundle d’abord :
# Build the tarballemdash plugin bundle
# Vérifier la sortietar tzf dist/my-plugin-1.1.0.tar.gz
# Publieremdash plugin publish