lrvo-modules

Régénérer les manifestes statiques de modules, de blocs personnalisés et de templates.

lrvo-modules sync scanne le package.json du projet et le dossier components/lrvo/, puis régénère les manifestes statiques que Next.js importe au boot.

npx lrvo-modules sync

Sans argument, la commande affiche son aide.

Commandes

CommandeEffet
syncRégénère les manifestes. Idempotent : pas d'écriture si le contenu est inchangé.
helpAffiche l'aide.

Fichiers générés

Tous dans app/.lrvo/, gitignorés : ils sont régénérés localement, jamais committés.

FichierContenu
modules.generated.jsManifeste serveur. import * as statique de chaque module, puis appel de register() en top-level await. Importé par instrumentation.js.
modules.client.jsManifeste client. 'use client', importe la sous-entrée ./client de chaque module et exporte un composant à rendre dans app/layout.js.
public-pages.server.jsManifeste des pages publiques. Module serveur, importe la sous-entrée ./public-page de chaque module. Importé par app/lrvo/[...path]/page.js, ce qui fait entrer les composants client de ces pages dans le React Client Manifest de la route.
blocks.server.jsEnregistre les blocs personnalisés de components/lrvo/blocks/ dans le registre serveur.
blocks.client.jsEnregistre les mêmes blocs dans le registre de l'éditeur, avec le préfixe custom:.
templates.server.jsEnregistre les templates de components/lrvo/templates/.

Il n'existe pas de manifeste client pour les templates. La raison est détaillée dans Templates : il tirerait les fichiers de templates dans le graphe client et casserait le rendu RSC.

Détection des modules

La commande inclut tout package des dependencies ou devDependencies qui matche :

FormeExemple
Préfixe officiel@lrvo/module-posts
Préfixe non scopélrvo-module-blog
Mot-clétout package dont le package.json contient "keywords": ["lrvo-module"]

Seuls les modules qui exposent une sous-entrée ./client sont inclus dans le manifeste client. Les modules purement back-end sont absents du bundle navigateur.

De même, seuls ceux qui exposent ./public-page entrent dans le manifeste des pages publiques : un module sans page publique ne charge pas le graphe RSC de /lrvo/[...path].

Quand la lancer

Le template @lrvo/start la câble dans trois scripts :

{
  "scripts": {
    "postinstall": "lrvo-modules sync",
    "dev": "lrvo-modules sync && next dev",
    "build": "lrvo-modules sync && next build"
  }
}

postinstall couvre l'ajout d'un module. Les hooks dev et build couvrent les retraits et les changements de version, qui ne déclenchent pas toujours une réinstallation.

En pratique, on ne la lance donc jamais à la main, sauf pour diagnostiquer.

Sortie

  ◆ 2 module(s) détecté(s)
    ◦ block:hero  (template+render)
    ◦ template:landing
  ✓ Manifestes à jour

Les blocs détectés indiquent les fichiers présents dans leur dossier : template, render, ou fields only.

Notes

Un module absent du manifeste ne s'enregistre pas. Si une page d'admin ou une entrée de sidebar n'apparaît pas après l'installation d'un module, vérifier d'abord le contenu de app/.lrvo/modules.generated.js.

Le manifeste client exporte un composant qui doit être rendu, pas seulement importé. Sous Turbopack, un import purement side-effect d'un fichier 'use client' orphelin inclut bien le fichier dans le bundle sans exécuter son code top-level : les registerPage() et registerWidget() ne tourneraient jamais. Voir Cycle de vie d'un module.

Sur cette page