La rĂ©alitĂ© Local â Prod (douloureuse, drĂŽle et instructive)
Le parcours professionnel dâun dĂ©veloppeur passe gĂ©nĂ©ralement par trois Ă©tapes :
- Junior : « Ăa marche đ »
- IntermĂ©diaire : « Et sâil y avait un edge case ? đ€ »
- Senior : « Quâest-ce que ça va donner en production ? đ »
Cet article est lĂ pour te faire passer de lâĂ©tape 2 Ă lâĂ©tape 3.
On va rire, dire « oh non⊠», et apprendre des pratiques qui sauvent vraiment des vies en production.
Si tu es prĂȘt, on commence đ
Prends ton cafĂ© â et ferme les logs de production (pour lâinstant).
đ§Ș 1ïžâŁ Le syndrome des variables dâenvironnement
« Ăa existait en local⊠mais en prod, tâes qui ? »
đ Lâhistoire
Lâappel API fonctionne parfaitement en local.
Tu dĂ©ploies en production⊠BOOM đŁ
Erreur 500 â Internal Server Error.
â Code problĂ©matique
const apiKey = process.env.API_KEY;
fetch(`https://api.example.com/data?key=${apiKey}`);
đ§ Que se passe-t-il ici ?
- Le code attend
API_KEY - Mais en production, cette variable nâest pas dĂ©finie
- LâAPI est appelĂ©e avec
undefined - LâAPI rĂ©pond :
« Elle est oĂč la clĂ©, mon ami ? »
đ Pourquoi ça marchait en local ?
Parce que tu avais un fichier .env :
API_KEY=super-secret-key
Réalité en production :
- Pas de
.env - Ou au mauvais endroit
- Ou avec un mauvais nom
â Solution solide
const apiKey = process.env.API_KEY;
if (!apiKey) {
throw new Error("API_KEY nâest pas dĂ©finie ! La production pleure đ");
}
đ ïž Astuce pratique
- Valide les variables dâenvironnement au dĂ©marrage de lâapplication
- Ne laisse pas lâexplosion arriver en runtime
đ§ RĂšgle dâor
« Une application qui tourne avec des variables dâenvironnement manquantes est une bombe Ă retardement. »
đ 2ïžâŁ La catastrophe des chemins de fichiers
Windows est indulgent. Linux est impitoyable.
đ Lâhistoire
Local : Windows
Production : Linux
RĂ©sultat : fichier introuvableâŠ
â Mauvais code
const filePath = "uploads\\image.png";
đ Local (Windows)
« Pas de souci, jâai compris. »
đ Production (Linux)
« Un backslash ? Mauvais univers. » â
â Bonne approche
import path from "path";
const filePath = path.join("uploads", "image.png");
đ§ Quâa-t-on gagnĂ© ?
- On a ignorĂ© les diffĂ©rences dâOS
- Le code est devenu portable
- Un bug de plus enterrĂ© đȘŠ
đ§ RĂšgle dâor
NâĂ©cris jamais les chemins de fichiers Ă la main. Utilise
path.
đ 3ïžâŁ SensibilitĂ© Ă la casse (majuscules/minuscules)
Le local pardonne. La production jamais.
đ Lâhistoire
AprÚs le déploiement :
Cannot find module './services/userService'
â Code
import UserService from "./services/userService";
đ Fichier rĂ©el :
UserService.js
đ Local (Mac / Windows)
« Je vois ce que tu veux dire. »
đ Production (Linux)
« Non. Mauvaise casse. Salut. » đ
â Solution
- Les noms de fichiers doivent ĂȘtre exacts
- Les imports doivent correspondre Ă lâidentique
- Utilise un linter automatique
import UserService from "./services/UserService";
đ§ La production, câest Linux.
Accepte-le, et la vie sera plus simple.
â±ïž 4ïžâŁ Les illusions de timing et dâasynchrone
« CâĂ©tait rapide en local⊠»
â Code dangereux
let user;
setTimeout(() => {
user = { name: "Cansu" };
}, 100);
console.log(user.name);
đ Local
- CPU tranquille
- Event loop rapide
- La chance est avec toi đČ
đ Production
- Trafic élevé
- Serveur chargé
userest toujoursundefinedđ„
â Logique correcte
setTimeout(() => {
const user = { name: "Cansu" };
console.log(user.name);
}, 100);
đ§ Quâa-t-on appris ?
- Ne jamais faire confiance au timing
- Faire confiance au scope
- Utiliser correctement callbacks ou async/await
đ§ RĂšgle dâor
Un code qui fait confiance au timing sera seul en production.
đ 5ïžâŁ CORS : ange en local, dĂ©mon en prod đ
đ Lâhistoire
LâAPI fonctionne en local.
En production, le navigateur hurle :
Blocked by CORS policy
đ Local
- Proxy activé
- Navigateur tolérant
- La vie est belle đ
đ± Production
- Vrai domaine
- Vraie sécurité
- Vraies rĂšgles
â Configuration serveur manquante
â Solution Express
import cors from "cors";
app.use(cors({
origin: "https://yourdomain.com",
methods: ["GET", "POST"]
}));
đ§ Astuce
- Ouvrir CORS avec
*= laisser la porte grande ouverte - Ne fais jamais ça au hasard en production
đ„ 6ïžâŁ Le mensonge du console.log
« Mais je lâai vu en local⊠»
â Habitude locale
console.log("User:", user);
đ Local
- Terminal ouvert
- Sous tes yeux
đ Production
- Logs ailleurs
- Ou pas collectés
- Ou personne ne les regarde
â Vrai logging
logger.info("User loaded", {
userId: user.id,
role: user.role
});
đ§ Pourquoi câest important ?
- Lâhistorique des erreurs est conservĂ©
- Le debug devient possible
- Le stress diminue đ
đ§ console.log = roue de vĂ©lo
Production = voiture đ
đ§š 7ïžâŁ Lâanatomie de « Ăa marche chez moi »
Cette phrase ne signifie pas :
- Que le code est correct
- Que le systĂšme est solide
Elle signifie en réalité :
- Que les environnements sont différents
Local â Production parce que :
- LâOS est diffĂ©rent
- La version de Node est différente
- Le trafic est différent
- La sécurité est différente
- Les utilisateurs sont impatients đ
â Checklist salvatrice avant la production
- Toutes les variables
.envsont-elles présentes ? - Les versions de Node sont-elles identiques ?
- La sensibilité à la casse Linux a-t-elle été testée ?
- Un vrai systĂšme de logs est-il en place ?
- La gestion des erreurs est-elle implémentée ?
- Quelquâun a-t-il dit « ça marche chez moi » ?
đŹ Grande mĂ©taphore de conclusion
- Local : scĂšne de rĂ©pĂ©tition đ
- Production : diffusion en direct đș
Tu peux faire des erreurs pendant les répétitions.
Mais en direct⊠tout le monde regarde đ
đ Mot de la fin
La production demande une chose :
« Ăcris-moi pour le pire des scĂ©narios. »
Le local, lui, dit :
« Je peux gérer. »
Et souviens-toi :
Le vĂ©ritable examen de ton code, câest la production.
Le local nâest que la bande-annonce đïž

