From b0f717b72a6e755c7882be149b9cd09067282baa Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Mon, 21 Sep 2020 23:30:44 -0500 Subject: [PATCH] Catch uncaught opener errors --- CHANGELOG.md | 2 ++ src/utils.js | 12 ++++++++++++ src/viewer.js | 6 +++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74f60edc..0adf4ba3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ _Note: Gaps between patch versions are faulty, broken or test releases._ ## UNRELEASED + * **Bug Fix** + * Prevent crashes when `openAnalyzer` was set to true in environments where there's no program to handle opening. ([#382](https://github.com/webpack-contrib/webpack-bundle-analyzer/pull/382) by [@wbobeirne](https://github.com/wbobeirne)) ## 3.9.0 diff --git a/src/utils.js b/src/utils.js index b0e352c0..9e44084d 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,5 +1,6 @@ const {inspect} = require('util'); const _ = require('lodash'); +const opener = require('opener'); const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; @@ -51,3 +52,14 @@ exports.defaultTitle = function () { return `${process.env.npm_package_name || 'Webpack Bundle Analyzer'} [${currentTime}]`; }; + +/** + * Calls opener on a URI, but silently try / catches it. + */ +exports.open = function (uri, logger) { + try { + opener(uri); + } catch (err) { + logger.debug(`Opener failed to open "${uri}":\n${err}`); + } +}; diff --git a/src/viewer.js b/src/viewer.js index 4d4d0d27..6cb6d0b3 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -6,12 +6,12 @@ const WebSocket = require('ws'); const _ = require('lodash'); const express = require('express'); const ejs = require('ejs'); -const opener = require('opener'); const mkdir = require('mkdirp'); const {bold} = require('chalk'); const Logger = require('./Logger'); const analyzer = require('./analyzer'); +const {open} = require('./utils'); const projectRoot = path.resolve(__dirname, '..'); const assetsRoot = path.join(projectRoot, 'public'); @@ -85,7 +85,7 @@ async function startServer(bundleStats, opts) { ); if (openBrowser) { - opener(url); + open(url, logger); } }); }); @@ -169,7 +169,7 @@ async function generateReport(bundleStats, opts) { logger.info(`${bold('Webpack Bundle Analyzer')} saved report to ${bold(reportFilepath)}`); if (openBrowser) { - opener(`file://${reportFilepath}`); + open(`file://${reportFilepath}`, logger); } resolve(); } catch (e) {