# Migration vers pnpm ## ✅ Changements effectués ### 1. Nettoyage npm - ✅ Suppression de `node_modules/` - ✅ Suppression de `package-lock.json` ### 2. Installation pnpm - ✅ Installation des dépendances avec `pnpm install` - ✅ Création de `pnpm-lock.yaml` - ✅ Ajout de `tailwindcss` comme dépendance dev explicite (requis par pnpm) ### 3. Configuration - ✅ Création de `.npmrc` avec : - `enable-pre-post-scripts=true` - `auto-install-peers=true` - ✅ Rebuild des packages critiques : `@prisma/client`, `prisma`, `esbuild`, `sharp`, `@tailwindcss/oxide` ### 4. Scripts package.json - ✅ Remplacement de tous les `npx` par `pnpm` dans les scripts - Scripts modifiés : - `backup:*` (create, list, verify, config, start, stop, status) - `cache:*` (monitor, stats, cleanup, clear) - `test:*` (story-points, jira-fields) ### 5. Dockerfile - ✅ Installation de pnpm via `corepack enable` - ✅ Variables d'environnement `PNPM_HOME` et `PATH` - ✅ Remplacement de `package-lock.json` par `pnpm-lock.yaml` - ✅ Remplacement de `npm install` par `pnpm install --frozen-lockfile` - ✅ Remplacement de tous les `npx`/`npm` par `pnpm` ### 6. docker-compose.yml - ✅ Mise à jour du service `towercontrol-dev` pour utiliser pnpm ### 7. Documentation - ✅ Mise à jour de `README.md` : - Prérequis : `pnpm 9+` au lieu de `npm` ou `yarn` - Toutes les commandes d'installation et d'utilisation - Scripts disponibles ## 🧪 Tests effectués - ✅ `pnpm install` - Installation réussie - ✅ `pnpm prisma generate` - Génération du client Prisma OK - ✅ `pnpm run lint` - Linting réussi - ✅ `pnpm run build` - Build de production réussi ## 📦 Nouvelles dépendances ajoutées - `tailwindcss` (devDependencies) - Requis explicitement pour l'import CSS avec pnpm ## ⚠️ Points d'attention ### Warning workspace root Un warning apparaît lors du build : ``` Warning: Next.js inferred your workspace root, but it may not be correct. We detected multiple lockfiles and selected the directory of /Users/julien.froidefond/package-lock.json ``` **Cause** : Un `package-lock.json` existe dans `/Users/julien.froidefond/` **Solutions** : 1. Supprimer le lockfile parent si inutilisé 2. Ou ajouter dans `next.config.ts` : ```typescript turbopack: { root: process.cwd(), } ``` ### Peer dependency warning ``` @emoji-mart/react 1.1.1 requires peer react@"^16.8 || ^17 || ^18" but found 19.1.0 ``` **Impact** : Aucun pour le moment, le projet fonctionne avec React 19 **Action** : À surveiller lors des mises à jour de `@emoji-mart/react` ## 🚀 Commandes usuelles ### Développement ```bash pnpm install # Installer les dépendances pnpm run dev # Mode développement pnpm run build # Build de production pnpm run start # Démarrer en production ``` ### Base de données ```bash pnpm prisma studio # Interface graphique pnpm prisma generate # Regénérer le client pnpm prisma db push # Appliquer le schéma ``` ### Qualité ```bash pnpm run lint # ESLint pnpm run prettier:format # Formatter pnpm run prettier:check # Vérifier le formatage ``` ### Docker ```bash docker compose up -d # Production (port 3006) docker compose --profile dev up -d # Développement (port 3005) docker compose down # Arrêter docker compose build --no-cache # Rebuild complet ``` ## 📝 Avantages de pnpm 1. **Performance** : Installation plus rapide (liens symboliques) 2. **Espace disque** : Économie grâce au store global 3. **Sécurité** : Structure node_modules stricte (pas d'accès aux dépendances non déclarées) 4. **Monorepo** : Support natif des workspaces 5. **Déterminisme** : Lockfile plus fiable ## 🔄 Rollback vers npm Si besoin de revenir à npm : ```bash # Supprimer pnpm rm -rf node_modules pnpm-lock.yaml .npmrc # Restaurer les anciens scripts dans package.json # Restaurer l'ancien Dockerfile # Restaurer l'ancien docker-compose.yml # Réinstaller avec npm npm install --legacy-peer-deps ``` --- **Date de migration** : 16 octobre 2025 **Version pnpm** : 10.15.1 **Version Node** : 20