Wrap console calls into a check (#2290)

This commit is contained in:
Dan Abramov
2017-05-20 19:06:48 +01:00
committed by GitHub
parent f3ff3f2473
commit d76c1b78eb
2 changed files with 45 additions and 31 deletions

View File

@@ -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.

View File

@@ -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 };