|
1 | | -import puppeteer from 'puppeteer'; |
2 | 1 | import lighthouse from 'lighthouse'; |
| 2 | +import chromeLauncher from 'chrome-launcher'; |
3 | 3 | import log from 'lighthouse-logger'; |
4 | 4 |
|
5 | | - |
6 | 5 | export const runLighthouse = async (url, settings) => { |
7 | 6 | let chrome; |
8 | 7 | try { |
9 | | - const logLevel = 'error'; |
| 8 | + const logLevel = settings?.logLevel || 'error'; |
10 | 9 | log.setLevel(logLevel); |
11 | | - chrome = await puppeteer.launch({ |
12 | | - args: [ |
| 10 | + |
| 11 | + // Launch Chrome using chrome-launcher |
| 12 | + chrome = await chromeLauncher.launch({ |
| 13 | + chromeFlags: [ |
13 | 14 | '--headless=new', |
14 | 15 | '--no-sandbox', |
15 | 16 | '--disable-gpu', |
16 | 17 | '--disable-dev-shm-usage', |
17 | | - '--remote-debugging-port=0', |
18 | 18 | '--disable-software-rasterizer', |
19 | 19 | '--disable-setuid-sandbox', |
20 | 20 | '--no-zygote', |
21 | 21 | ], |
22 | 22 | logLevel, |
23 | | - ignoreDefaultArgs: ['--disable-extensions'], |
| 23 | + handleSIGINT: true, |
24 | 24 | }); |
25 | 25 |
|
26 | | - // Get the debugging port from the browser's websocket endpoint |
27 | | - const browserWSEndpoint = chrome.wsEndpoint(); |
28 | | - const port = parseInt(browserWSEndpoint.split(':')[2].split('/')[0], 10); |
29 | | - |
30 | 26 | const results = await lighthouse( |
31 | 27 | url, |
32 | 28 | { |
33 | | - port, |
| 29 | + port: chrome.port, |
34 | 30 | output: 'html', |
35 | 31 | logLevel, |
| 32 | + onlyCategories: settings?.onlyCategories, |
| 33 | + locale: settings?.locale || 'en-US', |
| 34 | + formFactor: settings?.preset === 'desktop' ? 'desktop' : 'mobile', |
36 | 35 | }, |
37 | 36 | settings, |
38 | 37 | ); |
39 | 38 | return results; |
40 | 39 | } finally { |
41 | 40 | if (chrome) { |
42 | | - await chrome.close(); |
| 41 | + await chrome.kill(); |
43 | 42 | } |
44 | 43 | } |
45 | 44 | }; |
0 commit comments