# 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
