Для работы с Lighthouse в Node.js используется пакет
lighthouse, который устанавливается через npm:
npm install -g lighthouse
Также возможно локальное подключение в проект через:
npm install lighthouse --save-dev
После установки можно импортировать модуль в код:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
Для запуска аудита Lighthouse необходим экземпляр Chrome или
Chromium. Для автоматизации запуска удобно использовать
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 Result
}
Ключевые параметры options:
output — формат отчёта: 'html',
'json', 'csv'.onlyCategories — массив категорий для аудита, например
['performance', 'accessibility'].emulatedFormFactor — форм-фактор устройства:
'mobile' или 'desktop'.throttling — настройки эмуляции сети и CPU.Пример использования:
(async () => {
const url = 'https://example.com';
const options = {output: 'json', onlyCategories: ['performance']};
const result = await runLighthouse(url, options);
console.log(result.categories.performance.score);
})();
Lighthouse возвращает объект lhr (Lighthouse Result),
содержащий:
categories — оценки по категориям:
performance, accessibility,
best-practices, seo, pwa.audits — подробные проверки с описанием, рекомендуемыми
действиями и метриками.configSettings — настройки запуска аудита.environment — информация о браузере и системе.fetchTime — время проведения аудита.Пример извлечения ключевых метрик производительности:
const metrics = result.audits;
console.log('First Contentful Paint:', metrics['first-contentful-paint'].displayValue);
console.log('Largest Contentful Paint:', metrics['largest-contentful-paint'].displayValue);
console.log('Cumulative Layout Shift:', metrics['cumulative-layout-shift'].displayValue);
Lighthouse позволяет создавать собственные конфигурации аудита. Для
этого создаётся объект config:
const config = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance', 'seo'],
emulatedFormFactor: 'mobile',
throttling: {
rttMs: 150,
throughputKbps: 1638.4,
cpuSlowdownMultiplier: 4
}
}
};
Использование кастомной конфигурации:
const result = await lighthouse(url, {port: chrome.port}, config);
Можно отключать отдельные аудиты или добавлять собственные через модульную систему Lighthouse, что важно для крупных проектов с особенными требованиями.
Методы генерации отчётов:
const fs = require('fs');
const reportHtml = result.report; // если output = 'html'
fs.writeFileSync('report.html', reportHtml);
Для JSON:
const reportJson = JSON.stringify(result, null, 2);
fs.writeFileSync('report.json', reportJson);
Можно комбинировать форматы, используя массив
output:
const options = {output: ['html', 'json']};
Lighthouse легко интегрируется с CI/CD:
if (result.categories.performance.score < 0.9) {
throw new Error('Performance score ниже допустимого порога');
}
Для больших проектов часто создаются обёртки над Lighthouse, которые собирают данные с множества страниц и формируют агрегированные отчёты.
Lighthouse работает асинхронно, что позволяет запускать несколько аудитов одновременно. Однако важно учитывать потребление ресурсов браузера и CPU:
const urls = ['https://example.com', 'https://example.org'];
await Promise.all(urls.map(url => runLighthouse(url, {output: 'json'})));
Для крупных проектов лучше управлять количеством параллельных
запусков с использованием очередей или библиотек вроде
p-limit.
Каждая категория включает несколько аудитов, которые можно использовать отдельно или комбинировать, создавая индивидуальные отчёты для конкретных целей проекта.