SPEC — Fix Composant 3 : Import Dynamique Pagefind sans Erreur Vite
Cycle : DOC → SPEC → CODE → TEST
Scope : Correction de l’erreur ViteFailed to resolve import "/pagefind/pagefind.js"lors d’astro dev.
Destination Spec :docs/PM/phase0-pagefind-search.spec.md
1. Diagnostic de l’Erreur (Log Vite)
Section titled “1. Diagnostic de l’Erreur (Log Vite)”[ERROR] [vite] Internal server error: Failed to resolve import "/pagefind/pagefind.js" from "src/components/SearchModal.astro"Cause Racine :
Section titled “Cause Racine :”L’analyseur statique de Vite (vite:import-analysis) a essayé d’analyser la chaîne littérale "/pagefind/pagefind.js" à la compilation d’Astro dev. Comme le fichier /pagefind/pagefind.js est généré uniquement lors du post-build par le binaire pagefind, l’importation statique échoue.
2. Solution Technique (CODE)
Section titled “2. Solution Technique (CODE)”Dans apps/web/src/components/SearchModal.astro :
- Remplacer la chaîne littérale statique dans
import()par une variable dynamique et le commentaire/* @vite-ignore */:async function initPagefind() {if (pagefind) return pagefind;try {const pagefindPath = '/pagefind/pagefind.js';pagefind = await import(/* @vite-ignore */ pagefindPath);await pagefind.init();return pagefind;} catch (e) {console.warn('[Pagefind] Index non disponible localement.', e);return null;}} - Cela empêche Vite de tenter de résoudre la dépendance au moment de la compilation.
- En mode dev, si
/pagefind/pagefind.jsn’existe pas encore sur le serveur local, le bloccatchintercepte l’erreur proprement et affiche un message informatif dans l’UI sans faire crasher le serveur Astro.
3. Critères de Validation (TEST)
Section titled “3. Critères de Validation (TEST)”-
task dev(serveur Astro) démarre sans crash ni erreur 500 Vite. - La page s’affiche correctement dans le navigateur sans écran d’erreur Vite.
- Cliquer sur le bouton de recherche ou faire
Ctrl+Kouvre la modale de recherche sans planter. -
npx pnpm typecheckrepasse à 0 erreur. -
npx pnpm buildconstruit le site et la recherche fonctionne avec les données indexées.