Webpack — алерт по росту bundle-size в PR
Кто-то добавил `import * from 'lodash'` — bundle вырос на 70 KB. CI прошёл (tests OK), но user первый load стал на 300 ms медленнее. Catch — в CI до merge.
Рецепт
#!/usr/bin/env bash
# .github/workflows/bundle-size.yml step:
# - run: /opt/bundle-size-check.sh
# Save baseline once on main:
# webpack --json > stats.json && jq '[.assets[] | select(.name|endswith(".js")) | .size] | add' stats.json > .bundle-baseline
DIFF_PCT=${DIFF_PCT:-5} # alert above 5 % growth
webpack --mode=production --json > /tmp/stats.json 2>/dev/null
NEW=$(jq '[.assets[] | select(.name|endswith(".js")) | .size] | add' /tmp/stats.json)
OLD=$(cat .bundle-baseline 2>/dev/null || echo 0)
[ "$OLD" -eq 0 ] && exit 0 # first run, no baseline
GROWTH=$(( (NEW - OLD) * 100 / OLD ))
if [ "$GROWTH" -gt "$DIFF_PCT" ]; then
KB_NEW=$((NEW / 1024))
KB_OLD=$((OLD / 1024))
curl -fsS "$HEARTBEAT_URL" --data "bundle_growth_pct=$GROWTH,new_kb=$KB_NEW,old_kb=$KB_OLD"
exit 2
fi
echo "OK (growth=${GROWTH}%)"
То же самое в Enterno.io
Подключите Enterno heartbeat в CI — каждый PR проверяется на bundle-rise, regression-ы блокируются до merge.
Похожие рецепты
Релиз выкатили — Sentry даёт правильные алерты только за крупные сбои. Хочу видеть медленный рост error-rate за окно 15 минут до того, как это станет инцидентом.
После релиза Lighthouse perf-score упал с 90 до 65 (новая lib без code-split, или незаминифицированный bundle). Узнаешь только когда RUM начнёт показывать LCP > 4 сек.
Нужно убедиться, что сайт возвращает 2xx каждую минуту, и получить алерт в Slack/Telegram при падении.