fraza-modules
Régénérer les manifestes statiques de modules, de blocs personnalisés et de templates.
fraza-modules sync scanne le package.json du projet et le dossier components/fraza/, puis régénère les manifestes statiques que Next.js importe au boot.
npx fraza-modules syncSans argument, la commande affiche son aide.
Commandes
| Commande | Effet |
|---|---|
sync | Régénère les manifestes. Idempotent : pas d'écriture si le contenu est inchangé. |
help | Affiche l'aide. |
Fichiers générés
Tous dans app/.fraza/, gitignorés : ils sont régénérés localement, jamais committés.
| Fichier | Contenu |
|---|---|
modules.generated.js | Manifeste serveur. import * as statique de chaque module, puis appel de register() en top-level await. Importé par instrumentation.js. |
modules.client.js | Manifeste client. 'use client', importe la sous-entrée ./client de chaque module et exporte un composant à rendre dans app/(admin)/admin/layout.js. |
public-pages.server.js | Manifeste des pages publiques. Module serveur, importe la sous-entrée ./public-page de chaque module. Importé par app/fraza/[...path]/page.js, ce qui fait entrer les composants client de ces pages dans le React Client Manifest de la route. |
blocks.server.js | Enregistre les blocs personnalisés de components/fraza/blocks/ dans le registre serveur. |
blocks.client.js | Enregistre les mêmes blocs dans le registre de l'éditeur, avec le préfixe custom:, et les icônes de components/fraza/icons.js pour la navigation de l'admin quand ce fichier existe. Exporte lui aussi un composant à rendre dans app/(admin)/admin/layout.js. |
templates.server.js | Enregistre les templates de components/fraza/templates/. |
sources.css | Une directive Tailwind @source par module activé, vers le dossier dist/ réel du paquet, lien file: ou npm link résolu. Importé par styles/globals.css. Écrit même sans module. Voir Styles. |
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 :
| Forme | Exemple |
|---|---|
| Préfixe officiel, module gratuit | @fraza/module-posts |
| Préfixe officiel, module Pro | @fraza-pro/module-billing |
| Préfixe non scopé | fraza-module-blog |
| Mot-clé | tout package dont le package.json contient "keywords": ["fraza-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 /fraza/[...path].
Quand la lancer
Le template @fraza/start la câble dans trois scripts :
{
"scripts": {
"postinstall": "fraza-modules sync",
"dev": "fraza-modules sync && next dev",
"build": "fraza-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 à jourLes 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/.fraza/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.
Les deux manifestes clients se rendent dans le layout de l'administration, pas dans le layout racine. Ils tirent les pages d'admin des modules, l'éditeur de blocs et le jeu d'icônes complet. Rendus à la racine, ils partent dans le bundle de chaque page publique. npx fraza-doctor signale un layout racine qui les rend encore, et --fix les en retire.