docs(core): update server boundary rules and fix db import paths
- document `.server.js` suffix requirement for node-only imports in DEV.md - add client-safe subentries table and server-only barrel warnings in MODULES.md - fix `crud.js` and `database/index.js` to import from `db.server.js` - replace `createRequire` with `pathToFileURL` in `discover.server.js` for ESM-only modules - update admin navigation and registry to use safe client-compatible imports - bump version to 1.4.132
This commit is contained in:
@@ -58,6 +58,8 @@ Tout fichier épinglé à une frontière Next.js porte le suffixe dans son nom :
|
||||
|
||||
Ces suffixes ne sont pas cosmétiques : **le build les utilise comme source de vérité**. Le build compile l'intégralité de `src/` avec `bundle: false` — chaque fichier reste un module séparé, ce qui permet à Next.js de respecter les frontières RSC et `'use client'` sans que le bundler ne fusionne les modules.
|
||||
|
||||
**Tout fichier qui `import 'pg'`, `'fs'`, `'net'`, `'node:*'` doit porter `.server.js`.** Sans ce suffixe, le fichier est réputé neutre — un barrel client peut le ré-exporter par mégarde, et Turbopack/Webpack tracent la chaîne d'imports statiques jusqu'à `pg` dans le bundle browser. L'erreur `Module not found: Can't resolve 'dns'` côté client est typiquement causée par un fichier serveur sans suffixe atteint via un barrel mixte.
|
||||
|
||||
---
|
||||
|
||||
## Build et configuration tsup
|
||||
|
||||
@@ -284,6 +284,24 @@ import BlogAdminPage from './admin/BlogAdminPage.client.js';
|
||||
registerPage({ slug: 'blog', Component: BlogAdminPage, title: 'Blog' });
|
||||
```
|
||||
|
||||
### Sous-entrées `@zen/core/*` safe-pour-client
|
||||
|
||||
Le `client.js` d'un module ne doit jamais importer un barrel mixte (un barrel qui ré-exporte du code serveur à côté de constantes client-safe). Si on le fait, Turbopack/Webpack tracent toute la chaîne d'imports statiques et ramènent `pg`/`fs`/`next/headers` dans le bundle browser — qui crashe avec `Module not found: Can't resolve 'dns'` ou équivalent.
|
||||
|
||||
Sous-entrées explicitement safe pour un import depuis un fichier `'use client'` :
|
||||
|
||||
| Sous-entrée | Contenu |
|
||||
|-------------|---------|
|
||||
| `@zen/core/users/constants` | `PERMISSIONS`, `PERMISSION_DEFINITIONS`, `getPermissionGroups` — aucun import serveur. |
|
||||
| `@zen/core/features/admin` | `registerPage`, `registerWidget`, `registerNavItem`, `registerNavSection`, `buildNavigationSections`. Neutre côté boundary. |
|
||||
| `@zen/core/features/admin/components` | Composants client. |
|
||||
| `@zen/core/themes` | Tokens/utilitaires de thème. |
|
||||
| `@zen/core/toast` | API toast côté client. |
|
||||
| `@zen/core/shared/icons` | Composants d'icônes. |
|
||||
| `@zen/core/shared/components` | Composants partagés. |
|
||||
|
||||
Tout ce qui n'est pas dans cette liste — en particulier `@zen/core/users` (barrel complet), `@zen/core/database`, `@zen/core/api`, `@zen/core/storage` — est du code serveur. Ne JAMAIS l'importer depuis un fichier `'use client'` ou un fichier transitivement importé par un `'use client'`.
|
||||
|
||||
---
|
||||
|
||||
## Variables d'environnement
|
||||
|
||||
Reference in New Issue
Block a user