Для работы с Lighthouse в Node.js необходимо установить пакет
lighthouse через npm:
npm install lighthouse --save-dev
После установки его можно подключить в проекте:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
Обязательным компонентом является запуск Chrome в режиме без
интерфейса (headless), поскольку Lighthouse работает поверх
DevTools Protocol. Для этого часто используют библиотеку
chrome-launcher, которая обеспечивает управление
экземпляром браузера из Node.js.
Основная функция для аудита —
lighthouse(url, options, config). Параметры:
Пример запуска:
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port, output: 'html', logLevel: 'info'};
const runnerResult = await lighthouse('https://example.com', options);
console.log('Lighthouse score:', runnerResult.lhr.categories.performance.score * 100);
await chrome.kill();
})();
В объекте runnerResult содержится структура
lhr (Lighthouse Result), включающая все показатели аудита,
результаты отдельных проверок, скриншоты и рекомендации по
улучшению.
Lighthouse позволяет выбирать категории аудита через параметр
onlyCategories:
const options = {
port: chrome.port,
onlyCategories: ['performance', 'accessibility'],
};
Можно исключить определённые аудиторы или добавить кастомные, создавая свой объект конфигурации:
const config = {
extends: 'lighthouse:default',
settings: {
onlyAudits: ['first-contentful-paint', 'largest-contentful-paint'],
throttlingMethod: 'simulate',
}
};
Кастомизация конфигурации полезна при необходимости проводить специфические измерения, например, тестировать только производительность или доступность.
runnerResult.lhr содержит полный результат в формате
JSON:
performance, accessibility,
best-practices, seo, pwa).Пример извлечения ключевых метрик:
const {lhr} = runnerResult;
console.log('FCP:', lhr.audits['first-contentful-paint'].displayValue);
console.log('LCP:', lhr.audits['largest-contentful-paint'].displayValue);
console.log('Accessibility score:', lhr.categories.accessibility.score * 100);
Node.js API позволяет получать отчёты в различных форматах: HTML,
JSON, CSV. Это задаётся через опцию output:
const options = {port: chrome.port, output: 'html'};
const report = runnerResult.report;
require('fs').writeFileSync('report.html', report);
Можно одновременно генерировать несколько форматов:
const options = {port: chrome.port, output: ['html', 'json']};
Отчёты содержат визуализацию аудита, таблицы метрик и рекомендации, которые можно использовать в CI/CD или для внутреннего анализа.
Lighthouse идеально подходит для автоматической проверки сайтов в пайплайне. Для этого используют Headless Chrome и Node.js API. Ключевые моменты:
Пример проверки производительности с порогом:
if (lhr.categories.performance.score < 0.9) {
throw new Error('Performance score below threshold!');
}
Lighthouse Node.js API поддерживает:
port.Пример параллельного запуска:
const urls = ['https://example.com', 'https://example.org'];
await Promise.all(urls.map(url => lighthouse(url, options)));
Такой подход эффективен при аудите большого числа страниц или при тестировании мультилендинговых сайтов.
Node.js API Lighthouse предоставляет полный контроль над процессом аудита, возможность интеграции в автоматизированные процессы, детальную настройку аудитов и удобные форматы отчетности, что делает его незаменимым инструментом для анализа веб-производительности и качества сайтов.