chore: migrate from npm to pnpm for package management across documentation and scripts
This commit is contained in:
157
PNPM_MIGRATION.md
Normal file
157
PNPM_MIGRATION.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user