rollup-plugin-visualizer подключается к пайплайну Rollup на этапе пост-обработки бандла и формирует интерактивную визуализацию структуры итогового сборочного файла. Основная задача инструмента — предоставить детальную картину распределения модулей по размеру, включая вклад отдельных зависимостей, динамически импортируемых чанков и сторонних библиотек.
Rollup формирует итоговый JavaScript-бандл на основе графа зависимостей. При росте проекта структура этого графа усложняется, а итоговый размер начинает зависеть от множества факторов: дублирования зависимостей, неэффективного tree-shaking, избыточных импортов, неоптимального code splitting.
Анализ размера бандла позволяет выявлять:
rollup-plugin-visualizer интегрируется после генерации бандла и использует метаданные Rollup для построения визуальной модели.
Плагин подключается как обычный Rollup plugin:
npm install rollup-plugin-visualizer --save-dev
Конфигурация Rollup:
import { visualizer } from 'rollup-plugin-visualizer';
export default {
input: 'src/index.js',
output: {
dir: 'dist',
format: 'esm'
},
plugins: [
visualizer({
filename: 'stats.html',
open: true,
gzipSize: true,
brotliSize: true
})
]
};
На этапе generateBundle плагин агрегирует информацию о
модулях и формирует отчёт.
Плагин поддерживает несколько типов представления данных:
Иерархическая карта модулей, где размер блока соответствует весу кода. Основная форма анализа.
Структура отображения:
Ключевая особенность — визуальная идентификация «тяжёлых» зависимостей.
Круговая диаграмма с радиальным распределением модулей. Используется для анализа глубины вложенности и структуры импортов.
Графовая модель зависимостей между модулями. Применяется для анализа циклических или избыточных связей.
Анализ бандла включает несколько типов размера:
Особое значение имеют сжатые метрики, поскольку именно они ближе к реальной нагрузке при доставке через сеть.
Включение соответствующих опций:
visualizer({
gzipSize: true,
brotliSize: true
});
Типичная структура визуализации содержит несколько характерных паттернов:
Большие блоки, соответствующие зависимостям из
node_modules, часто занимают значительную долю бандла.
Особенно это характерно для UI-фреймворков, утилитарных библиотек и
date-парсеров.
Повторяющиеся блоки в разных чанках указывают на:
Наличие большого количества неиспользуемых экспортов внутри модулей проявляется в увеличении доли библиотек без реальной необходимости.
Rollup поддерживает разделение кода через динамические импорты:
import('./module.js').then(m => {
m.run();
});
rollup-plugin-visualizer позволяет оценить:
В сложных сборках формируются группы:
Визуализация позволяет определить:
Основные параметры:
visualizer({
filename: 'bundle-stats.html',
open: false,
template: 'treemap',
sourcemap: false,
gzipSize: true,
brotliSize: true,
projectRoot: process.cwd()
});
Поддерживаемые значения:
treemap — стандартная карта модулей;sunburst — радиальная диаграмма;network — граф зависимостей;raw-data — JSON представление.При включении sourcemap-режима возможно отображение исходных файлов вместо сгенерированных модулей, что важно при использовании TypeScript или Babel.
В автоматизированных пайплайнах отчёт формируется как статический HTML-файл. Далее он может:
Сравнение отчётов между сборками позволяет фиксировать рост или деградацию размера.
При интеграции в CI формируется базовая метрика:
Отклонения сигнализируют о:
Анализ визуализации часто выявляет следующие источники увеличения размера:
Treemap-структура требует понимания иерархии:
Размер прямоугольника пропорционален весу модуля в итоговом бандле, что позволяет мгновенно выявлять «узкие места».
Особое внимание уделяется node_modules:
rollup-plugin-visualizer помогает оценить целесообразность их использования в контексте итогового размера и альтернативных реализаций.
Структура кода напрямую влияет на результат визуализации:
Инструмент работает с итоговым бандлом, поэтому:
Анализ остаётся статическим, ориентированным на структуру сборки.