Installation

Installer @lrvo/module-medias, configurer le stockage objet, créer les tables et monter la route de service des fichiers.

Cette page couvre l'installation de @lrvo/module-medias dans un projet déjà structuré par @lrvo/start. Le module n'est jamais déclaré à la main : il est découvert au boot par scan des dépendances, comme décrit dans Cycle de vie d'un module.

C'est le seul module officiel qui demande une étape de câblage manuelle dans le projet, parce qu'il sert du binaire.

Prérequis

  • Un projet généré par npx @lrvo/start, avec @lrvo/core installé.
  • Un stockage objet compatible S3 configuré. Sans lui, le module démarre mais aucun téléversement n'aboutit. Voir Configuration.

Installer

npm i @lrvo/module-medias

sharp est déclarée en peer dependency, pas en dépendance. Next.js en installe déjà une copie, et la déclarer en peer garantit qu'il n'y en a qu'une seule dans le projet, dans une version que le site contrôle. Sur un projet dont le verrou est ancien, npm update sharp suffit à remonter au seuil de 0.35.0.

Ce choix est un exemple de la règle décrite dans Créer un module : tout ce que le site fournit déjà va en peerDependencies.

Ajouter la variable d'activation au .env :

#------ MODULE - MEDIAS ------#
LRVO_MODULE_MEDIAS=true

Sans ce drapeau, le module est ignoré : aucune table, aucune route, aucune entrée d'admin, et le registre média du core reste vide.

Puis régénérer les manifestes et créer les tables :

npx lrvo-modules sync    # déclenché automatiquement au postinstall
npx lrvo-db init         # crée lrvo_media et lrvo_media_references

lrvo-db init est idempotent. Sur une base qui possède déjà les tables, il applique les migrations en attente sans toucher aux données. Voir Modèle de données.

Monter la route de fichier

C'est l'étape à ne pas oublier. Sans elle, les médias sont téléversables mais aucune URL publique ne répond.

Créer le fichier suivant dans le projet :

// app/lrvo/media/[filename]/route.js
export { GET } from '@lrvo/core/media-registry/file-route';

L'import passe par le core, pas par le module. Le core y expose un relais qui transmet la requête au module quand il est actif, et renvoie une page introuvable sinon. Le projet peut donc garder ce fichier même s'il désinstalle le module, sans que son build casse.

Cette route doit rester un Route Handler et non une page : elle diffuse du binaire avec ses en-têtes de type, de cache et de disposition, ce qu'une page ne sait pas faire.

Le start template officiel fournit déjà ce fichier.

Vérifier

  1. La connexion à la base répond :
    npx lrvo-db test
  2. Médias apparaît dans la barre latérale de l'admin.
  3. Téléverser une image depuis /admin/media, puis ouvrir l'URL publique proposée par la fiche du média.

Si le téléversement échoue, la cause est presque toujours la configuration du stockage objet, pas le module. Voir Configuration.

Les permissions du module sont enregistrées et attribuées au rôle admin pendant lrvo-db init. Un module ajouté après coup n'a donc besoin que d'un npx lrvo-db init pour que les quatre permissions apparaissent dans /admin/roles.

Effet sur les autres modules

L'installation suffit à activer, dans tout le projet :

  • le sélecteur d'image du BlockEditor, sur les blocs image et sur les champs ImageField des blocs personnalisés ;
  • les champs de type image, thumbnail et gallery de @lrvo/module-posts, quel que soit le nom que le projet leur donne dans sa variable de type ;
  • le choix de l'image de partage Open Graph quand LRVO_SEO est actif.

Aucun de ces modules ne déclare @lrvo/module-medias en dépendance. Voir Intégration.

Mettre à jour

npx lrvo-update

Le module déclare la version minimale de @lrvo/core dont il a besoin. Un npm i @lrvo/module-medias@latest sur un projet dont le core est trop ancien produit un ERESOLVE au message peu parlant : lrvo-update résout au contraire le core et les modules ensemble, et laisse en place tout module qu'il ne peut pas monter.

Les notes de version sont livrées avec le package, dans node_modules/@lrvo/module-medias/CHANGELOG.md.

Notes

  • Le module dépend de @lrvo/core en peerDependency. Il n'embarque pas sa propre copie du core.
  • Désinstaller le module ne supprime ni les tables, ni les fichiers du stockage objet. dropTables est exporté depuis @lrvo/module-medias pour la partie base.
  • Désactiver le module sans le désinstaller laisse les contenus référencer des médias devenus irrésolubles. Les modules consommateurs traitent ce cas sans erreur, en rendant une référence vide.

Sur cette page