-
Notifications
You must be signed in to change notification settings - Fork 0
/
lighthouse.mjs
91 lines (81 loc) · 2.04 KB
/
lighthouse.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { join } from 'path'
import { writeFileSync, mkdirSync, existsSync } from 'fs'
import { launch } from 'chrome-launcher'
import lighthouse from 'lighthouse'
const serverUrls = [
{
pageName: 'Landing Page',
url: ''
},
{
pageName: 'Acadamy Index Page',
url: '/liquid-academy'
}
]
// add urls you want to locally test here
const localUrls = [
{
pageName: 'Landing Page',
url: ''
}
]
class LightHouseWrapper {
currentDateTime = new Date().toISOString()
reportFolder = join(process.cwd(), `reports/${this.currentDateTime}`)
chrome = null
baseUrl = 'https://stage.liqd.net'
urls = serverUrls
async auditSite (local = false) {
if (local) {
this.baseUrl = 'http://localhost:8006'
this.urls = localUrls
}
await this.setup()
const options = await this.getBrowserConfig()
await this.triggerLightHouseAuditAndGetResults(options)
await this.teardown()
}
async triggerLightHouseAuditAndGetResults (options) {
for (let index = 0; index < this.urls.length; index++) {
const runnerResult = await lighthouse(
this.baseUrl + this.urls[index].url,
options
)
const reportHtml = await runnerResult.report
await writeFileSync(
`${this.reportFolder}/${this.urls[index].pageName.trim()}.html`,
reportHtml
)
}
}
async setup () {
await this.makeReportDirectory()
this.chrome = await launch({ chromeFlags: ['--headless'] })
}
async makeReportDirectory () {
try {
if (!(await existsSync(`${this.reportFolder}`))) {
await mkdirSync(`${this.reportFolder}`, { recursive: true })
}
} catch (err) {
console.error(err)
}
}
async teardown () {
await this.chrome.kill()
}
async getBrowserConfig () {
const options = {
logLevel: 'info',
output: 'html',
port: this.chrome.port
}
return options
}
}
;(() => {
const lighthouse = new LightHouseWrapper()
;(async () => {
await lighthouse.auditSite(process.argv.splice(2)[0] === 'local')
})()
})()