Analyse et optimisation des bundles avec Claude Code
Apprenez l'analyse et l'optimisation des bundles avec Claude Code. Inclut des exemples de code pratiques.
Reduire la taille de l’application grace a l’analyse des bundles
L’expansion des bundles JavaScript impacte directement la vitesse de chargement de la page. Avec Claude Code, vous pouvez progresser efficacement de l’analyse des bundles a l’implementation de mesures d’optimisation.
Visualisation de la taille du bundle
> Analyse la taille du bundle et identifie les dependances a optimiser.
> Ajoute aussi la configuration pour visualiser avec un treemap.
// vite.config.ts
import { defineConfig } from 'vite';
import { visualizer } from 'rollup-plugin-visualizer';
export default defineConfig({
plugins: [
visualizer({
filename: 'dist/bundle-stats.html',
open: true,
gzipSize: true,
brotliSize: true,
template: 'treemap',
}),
],
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
router: ['react-router-dom'],
ui: ['@radix-ui/react-dialog', '@radix-ui/react-dropdown-menu'],
},
},
},
},
});
Verification automatique de la taille du bundle
// scripts/check-bundle-size.ts
import { readFileSync, readdirSync, statSync } from 'fs';
import path from 'path';
import { gzipSync, brotliCompressSync } from 'zlib';
interface BundleReport {
file: string;
raw: number;
gzip: number;
brotli: number;
}
function analyzeBundles(dir: string): BundleReport[] {
const files = readdirSync(dir, { recursive: true }) as string[];
return files
.filter(f => /\.(js|css)$/.test(f))
.map(file => {
const filePath = path.join(dir, file);
const content = readFileSync(filePath);
return {
file,
raw: content.length,
gzip: gzipSync(content).length,
brotli: brotliCompressSync(content).length,
};
})
.sort((a, b) => b.gzip - a.gzip);
}
function formatSize(bytes: number): string {
if (bytes < 1024) return `${bytes}B`;
return `${(bytes / 1024).toFixed(1)}kB`;
}
const reports = analyzeBundles('dist/assets');
console.log('\nRapport de taille du bundle\n');
console.log('Fichier | Raw | Gzip | Brotli');
console.log('--- | --- | --- | ---');
let totalGzip = 0;
for (const r of reports) {
totalGzip += r.gzip;
console.log(`${r.file} | ${formatSize(r.raw)} | ${formatSize(r.gzip)} | ${formatSize(r.brotli)}`);
}
console.log(`\nTotal (gzip) : ${formatSize(totalGzip)}`);
// Verification de la limite de taille
const LIMIT = 200 * 1024; // 200kB
if (totalGzip > LIMIT) {
console.error(`\nLa taille du bundle depasse la limite (${formatSize(LIMIT)}) !`);
process.exit(1);
}
Identification et remplacement des dependances lourdes
> Suggere des remplacements de dependances lourdes par des alternatives legeres.
// Patterns de remplacement courants
const replacements = {
// moment.js (300kB) -> dayjs (2kB)
'moment': 'dayjs',
// lodash (70kB) -> lodash-es (compatible tree-shaking)
'lodash': 'lodash-es',
// axios (13kB) -> fetch API (integre)
'axios': 'native fetch',
// uuid (3.5kB) -> crypto.randomUUID() (integre)
'uuid': 'crypto.randomUUID()',
};
// Importation individuelle de lodash
// Non : import _ from 'lodash';
// Oui : import debounce from 'lodash-es/debounce';
Division de code avec les importations dynamiques
// Division basee sur les routes
const routes = [
{
path: '/dashboard',
component: lazy(() => import('./pages/Dashboard')),
},
{
path: '/settings',
component: lazy(() => import('./pages/Settings')),
},
];
// Importation conditionnelle
async function loadEditor() {
const { EditorModule } = await import('./modules/heavy-editor');
return new EditorModule();
}
// Chargement paresseux des bibliotheques
async function highlightCode(code: string, lang: string) {
const { highlight } = await import('prismjs');
return highlight(code, lang);
}
Surveillance de la taille du bundle en CI/CD
# .github/workflows/bundle-check.yml
name: Bundle Size Check
on: [pull_request]
jobs:
bundle-size:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- run: npx tsx scripts/check-bundle-size.ts
- uses: actions/upload-artifact@v4
with:
name: bundle-report
path: dist/bundle-stats.html
Summary
L’analyse et l’optimisation des bundles sont etroitement liees au tree shaking. Avec Claude Code, vous pouvez realiser efficacement l’analyse des dependances et leur remplacement par des alternatives legeres. Integrer la verification de la taille du bundle dans le CI/CD previent la degradation des performances. Pour l’optimisation du build Vite, consultez la documentation officielle de Vite.
Related Posts
Maîtriser les Hooks de Claude Code : Formatage automatique, tests automatiques et plus encore
Apprenez à configurer le formatage et les tests automatiques avec les hooks de Claude Code. Inclut des exemples de configuration pratiques et des cas d'utilisation concrets.
Configuration des serveurs MCP dans Claude Code et cas d'utilisation pratiques
Un guide complet sur les capacités des serveurs MCP de Claude Code. Apprenez à connecter des outils externes, configurer des serveurs et découvrez des exemples d'intégration concrets.
Le guide complet pour rédiger un CLAUDE.md : Bonnes pratiques de configuration de projet
Un guide approfondi pour rédiger des fichiers CLAUDE.md efficaces. Apprenez à communiquer votre stack technologique, vos conventions et la structure de votre projet pour maximiser la qualité des réponses de Claude Code.