Skip to content

Webpack — алерт по росту bundle-size в PR

Кто-то добавил `import * from 'lodash'` — bundle вырос на 70 KB. CI прошёл (tests OK), но user первый load стал на 300 ms медленнее. Catch — в CI до merge.

Рецепт

bash
#!/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.

Настроить API monitor → ← Все рецепты

Похожие рецепты

Релиз выкатили — Sentry даёт правильные алерты только за крупные сбои. Хочу видеть медленный рост error-rate за окно 15 минут до того, как это станет инцидентом.