Webpack Bundle Analyzer — это инструмент для визуализации содержимого бандла, созданного сборщиком Webpack. Он позволяет понять, какие модули занимают больше всего места, выявлять дублирующиеся зависимости и оптимизировать размер сборки.
Stencil использует собственный механизм сборки на основе Rollup, но начиная с версии 2.x возможно интегрировать Webpack Bundle Analyzer через кастомизацию конфигурации или через промежуточные шаги при сборке.
npm install --save-dev webpack-bundle-analyzer
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
plugins: [
new BundleAnalyzerPlugin({
analyzerMode: 'static', // создаёт HTML файл с визуализацией
openAnalyzer: false, // не открывать браузер автоматически
reportFilename: 'bundle-report.html'
})
]
};
Stencil позволяет использовать хуки сборки для добавления кастомной
логики. Для интеграции анализа бандла можно использовать хук
stencil.config.ts:
import { Config } from '@stencil/core';
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
export const config: Config = {
namespace: 'my-component-library',
outputTargets: [
{
type: 'dist',
esmLoaderPath: '../loader'
}
],
rollupPlugins: {
after: [
BundleAnalyzerPlugin({
analyzerMode: 'static',
openAnalyzer: false,
reportFilename: 'stencil-bundle-report.html'
})
]
}
};
Важно: Плагин Webpack можно использовать через Rollup-поддержку, применяя специальные адаптеры, например
rollup-plugin-webpack-bundle-analyzer.
server (запуск сервера с интерактивной визуализацией),
static (генерация HTML файла), disabled
(отключение анализа).Пример расширенной конфигурации с JSON-отчетом:
new BundleAnalyzerPlugin({
analyzerMode: 'static',
reportFilename: 'bundle-report.html',
generateStatsFile: true,
statsFilename: 'bundle-stats.json'
});
HTML-отчет отображает дерево модулей бандла с визуальным разбиением по размерам. Основные возможности:
JSON-отчет можно использовать для автоматизированного анализа в CI/CD, позволяя фиксировать рост бандла после каждого коммита.
source-map-explorer
для детального просмотра исходных файлов.После анализа отчета можно:
import() динамически).В CI/CD можно настроить скрипт в package.json:
{
"scripts": {
"analyze": "stencil build && webpack --config webpack.analyze.js"
}
}
Это позволяет автоматически генерировать отчет после сборки и сохранять его для мониторинга размера бандлов при релизах.
Благодаря Webpack Bundle Analyzer, интегрированному в Stencil, возможно контролировать размер бандла, обнаруживать узкие места и принимать обоснованные решения по оптимизации библиотеки компонентов.