Для работы с Lighthouse в JavaScript используется пакет
lighthouse, который можно установить через npm:
npm install -g lighthouse
Для локальной интеграции в проект:
npm install --save-dev lighthouse
После установки библиотека доступна как из командной строки, так и через Node.js API. Для автоматизации аудита в workflow предпочтительно использовать Node.js API, так как это позволяет гибко управлять конфигурацией, обработкой результатов и интеграцией с системами CI/CD.
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
async function runLighthouse(url, options = {}) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
options.port = chrome.port;
const result = await lighthouse(url, options);
await chrome.kill();
return result.lhr; // Lighthouse Report JSON
}
Lighthouse поддерживает множество опций, которые влияют на аудиты:
onlyCategories – позволяет запускать
проверку только выбранных категорий (performance,
accessibility, best-practices,
seo, pwa).output – формат отчёта:
html, json, csv.throttling – настройки сетевого и
процессорного эмулятора для имитации различных условий.emulatedFormFactor – определяет тип
устройства для анализа: mobile или
desktop.maxWaitForFcp и
maxWaitForLoad – ограничения по времени ожидания
первой визуальной отрисовки и полной загрузки страницы.Пример конфигурации:
const options = {
onlyCategories: ['performance', 'seo'],
output: 'json',
emulatedFormFactor: 'mobile',
throttling: {
rttMs: 150,
throughputKbps: 1638,
cpuSlowdownMultiplier: 4,
}
};
Lighthouse легко интегрируется в автоматизированные пайплайны. Для этого создаются скрипты, которые выполняются в процессе сборки:
name: Lighthouse Audit
on:
push:
branches: [main]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- run: npm ci
- run: npx lighthouse https://example.com --output=json --output-path=./lighthouse-report.json
stages:
- audit
lighthouse-audit:
image: node:20
stage: audit
script:
- npm ci
- npx lighthouse https://example.com --output=json --output-path=./lighthouse-report.json
artifacts:
paths:
- lighthouse-report.json
Использование CI/CD позволяет автоматически отслеживать регрессии в производительности, SEO и доступности.
Для интеграции в workflow важно не только запускать Lighthouse, но и обрабатывать результаты:
const fs = require('fs');
async function saveReport(url, options) {
const report = await runLighthouse(url, options);
fs.writeFileSync('lighthouse-report.json', JSON.stringify(report, null, 2));
if (report.categories.performance.score < 0.9) {
console.warn(`Производительность ниже 90%: ${report.categories.performance.score * 100}%`);
}
}
saveReport('https://example.com', options);
Можно настроить отправку уведомлений в Slack, email или другие системы мониторинга, используя JSON-отчет Lighthouse как источник данных.
Для проектов с большим количеством страниц удобно запускать Lighthouse через цикл:
const urls = [
'https://example.com',
'https://example.com/about',
'https://example.com/contact'
];
(async () => {
for (const url of urls) {
const report = await runLighthouse(url, options);
fs.writeFileSync(`reports/${url.replace(/https?:\/\//, '').replace(/\//g, '_')}.json`, JSON.stringify(report, null, 2));
}
})();
Это позволяет создавать централизованный набор отчетов для анализа всей веб-страницы или приложения.
Lighthouse поддерживает плагины и кастомные аудитории, что позволяет создавать собственные правила оценки:
module.exports = {
audits: [
{
audit: require('lighthouse-plugin-custom-audit/my-audit'),
name: 'my-custom-audit'
}
],
categories: {
customCategory: {
title: 'Custom Category',
description: 'Аудиты, разработанные специально для проекта',
auditRefs: [
{id: 'my-custom-audit', weight: 1}
]
}
}
};
Использование кастомных аудитов позволяет расширять возможности Lighthouse под специфические требования проекта и интегрировать их в workflow для непрерывной проверки.
Lighthouse, интегрированный в CI/CD, позволяет:
Эта комбинация делает Lighthouse мощным инструментом для систематического контроля качества веб-приложений.