YoshiyukiKato / nightharbor

:bridge_at_night: configure lighthouse batch execution and reporting more simply
MIT License
8 stars 0 forks source link
batch lighthouse

nightharbor

npm CircleCI sonarcloud badge Greenkeeper badge

A lighthouse batch executor providing simple configuration about targeting, execution, and reporting.

use from cli

$ npm i -g nightharbor
$ nhb --config [path to config]

use from program

$ npm i nightharbor
import nhb from "nightharbor";
import config from "./path/to/config";

nhb.exec(config)
  .then(() => console.log("done"));
  .catch(console.error);

configuration

export default {
  loaders: [Loader...],
  reporters: [Reporter...],
  chromeNum: 2,
  puppeteerConfig: {puppeteerConfig},
  lighthouseConfig: {lighthouseConfig}
}

loaders [required]

Array of Loaders. A Loader imports a list of targets for lighthouse execution. An item of the target list must contains url as follows:

{ url: "https://google.com" }

Use built-in loaders, external loaders, and your custom loaders.

Use built-in loader

SimpleLoader is a built-in loader to specify a target list manually.

import {SimpleLoader} from "nightharbor/loader";

export default {
  //...
  loaders: [
    new SimpleLoader([
      { url: "https://google.com" },
      ...
    ])
  ]
  //...
}

Use external loaders

Define custom loader

To define custom Loader, implement asynchronous load method that returns Promise of a list of lighthouse targets.

class CustomLoader {
  /**
   * @return {Promise<{ url: string, [key: string]: any }[]>}
   */
  load(){
    //some asynchronous fetch tasks such as read file and api request.
    return Promise.resolve([
      { url: "https://google.com" }
    ]);
  }
}

reporters [required]

Array of Reporters. A Reporter writes result of lighthouse execution. Use built-in reporters, external reporters, or your custom reporters.

Use built-in reporter

SimpleReporter is a built-in reporter to output result to console.

import {SimpleReporter} from "nightharbor/reporter";

export default {
  ...,
  reporters: [
    new SimpleReporter()
  ],
  ...
}

Use external reporters

Define custom reporter

Implement open, write, and close method.

class CustomReporter{
  /**
   * will be called when a lighthouse execution completed
   * @param {any} result
   * @return {void}
   */
  write(result){
    //do something
  }

  /**
   * will be called after all executions
   * @return {Promise}
   */
  close(){
    //do something
  }
}

chromeNum [option]

Number of chromes to launch for running lighthouse.
This parameter is optional. Default value is 1.

puppeteerConfig [option]

Object of options to launch chrome via puppeteer. See launch config of puppeteer
This parameter is optional. Default value is follows:

{
  headless: true
}

lighthouseConfig [option]

Object of options to run lighthouse. See config of LightHouse
This parameter is optional. Default value is follows:

{
  extends: 'lighthouse:default',
  settings: {
    onlyCategories: ['performance'],
  }
}