chore: improve docker build and lighthouse config

This commit is contained in:
moonrailgun 2024-09-30 14:48:24 +08:00
parent 8b6a74033c
commit 57ebaf6ad3
2 changed files with 25 additions and 18 deletions

View File

@ -35,6 +35,7 @@ WORKDIR /app/tianji
# We don't need the standalone Chromium # We don't need the standalone Chromium
ENV PUPPETEER_SKIP_DOWNLOAD=true ENV PUPPETEER_SKIP_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
ENV DEBUG=puppeteer:*
RUN apk add --no-cache \ RUN apk add --no-cache \
udev \ udev \

View File

@ -8,31 +8,37 @@ export async function generateLighthouse(url: string): Promise<Result> {
const browser = await puppeteer.launch({ const browser = await puppeteer.launch({
// Set to false if you want to see the script in action. // Set to false if you want to see the script in action.
headless: 'new', headless: 'new',
args: ['--no-sandbox'], args: ['--no-sandbox', '--single-process'],
defaultViewport: null, defaultViewport: null,
ignoreDefaultArgs: ['--enable-automation'], ignoreDefaultArgs: ['--enable-automation'],
dumpio: true,
}); });
const page = await browser.newPage();
// Wait for Lighthouse to open url, then inject our stylesheet. try {
browser.on('targetchanged', async (target) => { const page = await browser.newPage();
if (page && page.url() === url) {
await page.addStyleTag({ content: '* {color: red}' }); // Wait for Lighthouse to open url, then inject our stylesheet.
browser.on('targetchanged', async (target) => {
if (page && page.url() === url) {
await page.addStyleTag({ content: '* {color: red}' });
}
});
// Lighthouse will open the URL.
// Puppeteer will observe `targetchanged` and inject our stylesheet.
const res = await lighthouse(url, undefined, undefined, page);
if (!res) {
throw new Error('Lighthouse failed to generate report');
} }
});
// Lighthouse will open the URL. page.close({ runBeforeUnload: false });
// Puppeteer will observe `targetchanged` and inject our stylesheet.
const res = await lighthouse(url, undefined, undefined, page); const { lhr } = res;
if (!res) {
throw new Error('Lighthouse failed to generate report'); return lhr;
} finally {
await browser.close();
} }
const { lhr } = res;
await browser.close();
return lhr;
} }
export function getLighthouseReport(lhr: Result): string { export function getLighthouseReport(lhr: Result): string {