@ice/screenshot
Version:
Take a screenshot of web page
67 lines (61 loc) • 2.6 kB
JavaScript
const spawn = require('cross-spawn');
const chalk = require('chalk');
function isNotFoundError(error = '') {
return error.indexOf('Cannot find module') === 0;
}
/**
* get Puppeteer(headless chromium)
*
* we don't want depend on puppeteer locally,
* puppeteer takes a long to install
*
*/
module.exports = async function getPuppeteer() {
try {
// get Puppeteer from local node_modules
// eslint-disable-next-line global-require
return require(process.env.PUPPETEER_PATH || 'puppeteer');
} catch (error) {
if (isNotFoundError(error.message)) {
try {
// get Puppeteer from global node_modules
// eslint-disable-next-line global-require
return require('import-global')('puppeteer');
} catch (importGlobalErr) {
// if not found puppeteer from global node_modules
// install it to global node_modules
if (isNotFoundError(importGlobalErr.message)) {
console.log(chalk.yellow('\n\nCannot find puppeteer in current environment.'));
console.log(chalk.yellow('Installing globally puppeteer, please wait a moment.\n'));
// set puppeteer download host
// default download host has been blocking, use cnpm mirror
// https://github.com/cnpm/cnpmjs.org/issues/1246#issuecomment-341631992
spawn.sync('npm', ['config', 'set', 'puppeteer_download_host=https://storage.googleapis.com.cnpmjs.org']);
const result = spawn.sync(
'npm',
['install', 'puppeteer@1.x', '-g', '--registry', 'https://registry.npmmirror.com'],
{ stdio: 'inherit' },
);
spawn.sync('npm', ['config', 'delete', 'puppeteer_download_host']);
// get spawn error, exit with code 1
if (result.error) {
console.log(chalk.red('\n\nInstall Error. \nPlease install puppeteer using the following commands:'));
console.log(chalk.white('\n npm uninstall puppeteer -g'));
console.log(
chalk.white(
'\n PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm i puppeteer -g --registry=https://registry.npmmirror.com',
),
);
console.log(chalk.white('\n screenshot -u http://www.example.com\n'));
process.exit(1);
}
console.log(chalk.green('\nPuppeteer installed.\n'));
// eslint-disable-next-line global-require
return require('import-global')('puppeteer');
}
throw Error(importGlobalErr);
}
}
throw Error(error);
}
};