Déploiement
Mise en production
Le Déploiement des Applications React
Le déploiement est la dernière étape du développement d’une application React. Nous allons explorer les différentes options de déploiement et les optimisations nécessaires.
Préparation au déploiement
Build de production
npm run build
Cette commande crée un dossier build
contenant votre application optimisée pour la production.
Configuration des variables d’environnement
# .env.production
REACT_APP_API_URL=https://api.production.com
REACT_APP_ANALYTICS_ID=UA-XXXXXXXX-X
Plateformes de déploiement populaires
Netlify
- Installation de Netlify CLI :
npm install -g netlify-cli
- Déploiement :
netlify deploy
- Configuration (netlify.toml) :
[build]
command = "npm run build"
publish = "build"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
Vercel
- Installation de Vercel CLI :
npm install -g vercel
- Déploiement :
vercel
- Configuration (vercel.json) :
{
"version": 2,
"builds": [
{
"src": "package.json",
"use": "@vercel/static-build",
"config": { "distDir": "build" }
}
]
}
GitHub Pages
- Installation des dépendances :
npm install gh-pages --save-dev
- Configuration (package.json) :
{
"homepage": "https://votre-username.github.io/votre-repo",
"scripts": {
"predeploy": "npm run build",
"deploy": "gh-pages -d build"
}
}
- Déploiement :
npm run deploy
Optimisation des performances
Optimisation des images
// Utilisation de Next.js Image
import Image from 'next/image';
function OptimizedImage() {
return (
<Image
src="/image.jpg"
alt="Description"
width={800}
height={600}
loading="lazy"
quality={75}
/>
);
}
Code splitting
// Import dynamique
const HeavyComponent = React.lazy(() => import('./HeavyComponent'));
function App() {
return (
<Suspense fallback={<div>Chargement...</div>}>
<HeavyComponent />
</Suspense>
);
}
Optimisation des bundles
// webpack.config.js
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
minSize: 20000,
maxSize: 244000,
minChunks: 1,
maxAsyncRequests: 30,
maxInitialRequests: 30,
cacheGroups: {
defaultVendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10,
reuseExistingChunk: true,
},
},
},
},
};
Sécurité
Configuration HTTPS
# nginx.conf
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# ...
}
En-têtes de sécurité
// server.js
const helmet = require('helmet');
app.use(helmet());
Monitoring et Analytics
Intégration de Google Analytics
// analytics.js
import ReactGA from 'react-ga';
ReactGA.initialize('UA-XXXXXXXX-X');
function App() {
useEffect(() => {
ReactGA.pageview(window.location.pathname);
}, []);
}
Monitoring des erreurs
// errorBoundary.js
class ErrorBoundary extends React.Component {
componentDidCatch(error, errorInfo) {
// Envoyer l'erreur à un service de monitoring
logErrorToService(error, errorInfo);
}
render() {
return this.props.children;
}
}
Bonnes pratiques
-
Performance :
- Optimisez les images
- Utilisez le code splitting
- Minimisez les bundles
- Mettez en cache les ressources
-
Sécurité :
- Utilisez HTTPS
- Configurez les en-têtes de sécurité
- Protégez les routes sensibles
- Validez les entrées utilisateur
-
Monitoring :
- Surveillez les performances
- Suivez les erreurs
- Analysez le comportement utilisateur
- Maintenez des logs
Exercices pratiques
-
Déployez une application sur Netlify :
- Configurez les variables d’environnement
- Optimisez les performances
- Mettez en place le monitoring
-
Déployez une application sur Vercel :
- Configurez le domaine personnalisé
- Mettez en place le CI/CD
- Optimisez le build
-
Déployez une application sur GitHub Pages :
- Configurez le routage
- Optimisez les assets
- Mettez en place les tests automatisés
Conclusion
Le déploiement est une étape cruciale dans le cycle de vie d’une application React. En suivant ces bonnes pratiques, vous pouvez assurer une mise en production réussie et maintenable.
Commentaires
Les commentaires sont alimentés par GitHub Discussions
Connectez-vous avec GitHub pour participer à la discussion