From 3338dbf03ab8e665fdf886c5907c1111cd2061f9 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Sat, 20 May 2017 19:05:39 +0100 Subject: [PATCH] Wrap console calls into a check --- .../react-dev-utils/webpackHotDevClient.js | 26 ++++++---- .../src/effects/proxyConsole.js | 50 +++++++++++-------- 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/packages/react-dev-utils/webpackHotDevClient.js b/packages/react-dev-utils/webpackHotDevClient.js index 64725367378..05c2bb2b7ab 100644 --- a/packages/react-dev-utils/webpackHotDevClient.js +++ b/packages/react-dev-utils/webpackHotDevClient.js @@ -172,9 +172,11 @@ var connection = new SockJS( // to avoid spamming the console. Disconnect usually happens // when developer stops the server. connection.onclose = function() { - console.info( - 'The development server has disconnected.\nRefresh the page if necessary.' - ); + if (typeof console !== 'undefined') { + console.info( + 'The development server has disconnected.\nRefresh the page if necessary.' + ); + } }; // Remember some state related to hot module replacement. @@ -184,8 +186,10 @@ var hasCompileErrors = false; function clearOutdatedErrors() { // Clean up outdated compile errors, if any. - if (hasCompileErrors && typeof console.clear === 'function') { - console.clear(); + if (typeof console !== 'undefined') { + if (hasCompileErrors && typeof console.clear === 'function') { + console.clear(); + } } } @@ -222,8 +226,10 @@ function handleWarnings(warnings) { errors: [], }); - for (var i = 0; i < formatted.warnings.length; i++) { - console.warn(stripAnsi(formatted.warnings[i])); + if (typeof console !== 'undefined') { + for (var i = 0; i < formatted.warnings.length; i++) { + console.warn(stripAnsi(formatted.warnings[i])); + } } } @@ -260,8 +266,10 @@ function handleErrors(errors) { showErrorOverlay(formatted.errors[0]); // Also log them to the console. - for (var i = 0; i < formatted.errors.length; i++) { - console.error(stripAnsi(formatted.errors[i])); + if (typeof console !== 'undefined') { + for (var i = 0; i < formatted.errors.length; i++) { + console.error(stripAnsi(formatted.errors[i])); + } } // Do not attempt to reload now. diff --git a/packages/react-error-overlay/src/effects/proxyConsole.js b/packages/react-error-overlay/src/effects/proxyConsole.js index 6b40ff0e125..f17d01890c2 100644 --- a/packages/react-error-overlay/src/effects/proxyConsole.js +++ b/packages/react-error-overlay/src/effects/proxyConsole.js @@ -26,17 +26,21 @@ export type { ReactFrame }; /// TODO: a more comprehensive implementation. const registerReactStack = () => { - // $FlowFixMe - console.reactStack = frames => reactFrameStack.push(frames); - // $FlowFixMe - console.reactStackEnd = frames => reactFrameStack.pop(); + if (typeof console !== 'undefined') { + // $FlowFixMe + console.reactStack = frames => reactFrameStack.push(frames); + // $FlowFixMe + console.reactStackEnd = frames => reactFrameStack.pop(); + } }; const unregisterReactStack = () => { - // $FlowFixMe - console.reactStack = undefined; - // $FlowFixMe - console.reactStackEnd = undefined; + if (typeof console !== 'undefined') { + // $FlowFixMe + console.reactStack = undefined; + // $FlowFixMe + console.reactStackEnd = undefined; + } }; type ConsoleProxyCallback = (message: string, frames: ReactFrame[]) => void; @@ -44,21 +48,23 @@ const permanentRegister = function proxyConsole( type: string, callback: ConsoleProxyCallback ) { - const orig = console[type]; - console[type] = function __stack_frame_overlay_proxy_console__() { - try { - const message = arguments[0]; - if (typeof message === 'string' && reactFrameStack.length > 0) { - callback(message, reactFrameStack[reactFrameStack.length - 1]); + if (typeof console !== 'undefined') { + const orig = console[type]; + console[type] = function __stack_frame_overlay_proxy_console__() { + try { + const message = arguments[0]; + if (typeof message === 'string' && reactFrameStack.length > 0) { + callback(message, reactFrameStack[reactFrameStack.length - 1]); + } + } catch (err) { + // Warnings must never crash. Rethrow with a clean stack. + setTimeout(function() { + throw err; + }); } - } catch (err) { - // Warnings must never crash. Rethrow with a clean stack. - setTimeout(function() { - throw err; - }); - } - return orig.apply(this, arguments); - }; + return orig.apply(this, arguments); + }; + } }; export { permanentRegister, registerReactStack, unregisterReactStack };