Disable error overlay in development mode

Create React-App

Create React-App Problem Overview


Is there a way to disable the error overlay when running a create-react-app in development mode?

This is the overlay I'm talking about:

enter image description here

I'm asking this because im using error boundaries (React 16 Error Boundaries) in my app to display error messages when components crashes, but the error overlay pops up and covers my messages.

Create React-App Solutions


Solution 1 - Create React-App

We don't provide an option to disable the error overlay in development. Error boundaries do not take its place (they are meant for production use).

There is no harm having both the development error overlay and your error boundary; simply press Escape if you'd like to view your error boundary.

We feel the error overlay provides tremendous value over your typical error boundary (source code, click to open, etc). It is also vital as we explore enabling hot component reloading as a default behavior for all users.

If you feel strongly about disabling the overlay, you'll need to eject from react-scripts and discontinue use of webpackHotDevClient. A less intrusive method may be removing the error event listener installed by the overlay off of window.

Solution 2 - Create React-App

An alternate solution is to add the following CSS style:

iframe
{
    display: none;
}

This prevents the error from showing.

Solution 3 - Create React-App

The error overlay can be disabled by using the stopReportingRuntimeErrors helper utility in the react-error-overlay package.

First, install the react-error-overlay package:

yarn add react-error-overlay

Then in index.js — right before mounting the root React component, import the utility and invoke it like this:

import { stopReportingRuntimeErrors } from "react-error-overlay";

if (process.env.NODE_ENV === "development") {
  stopReportingRuntimeErrors(); // disables error overlays
}

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById("root")
);

Error overlays in create-react-app should now be disabled.

Solution 4 - Create React-App

You can suppress React's error event handling by capturing the event first. for example, by placing in public/index.html's <head>:

<script>
      window.addEventListener('error', function(e){
        // prevent React's listener from firing
        e.stopImmediatePropagation();
        // prevent the browser's console error message 
        e.preventDefault();
      });
</script>

Since you probably still want React's error overlay for errors outside the error boundary, consider this option:

<script>
      window.addEventListener('error', function(e){
        const {error} = e;
        if (!error.captured) {
          error.captured = true;
          e.stopImmediatePropagation();
          e.preventDefault();
          // Revisit this error after the error boundary element processed it 
          setTimeout(()=>{
            // can be set by the error boundary error handler
            if (!error.shouldIgnore) {
              // but if it wasn't caught by a boundary, release it back to the wild
              throw error;
            }
          })
        }
      });
</script>

assuming your error boundary does something like:

    static getDerivedStateFromError(error) {
        error['shouldIgnore'] = true;
        return { error };
    }

The result is a behaviour that follows try...catch line of reasoning.

Solution 5 - Create React-App

To solve this issue, you could use CSS:

body > iframe {
  display: none !important;
}

Solution 6 - Create React-App

for some reason the overlay popped up for me only now while upgrading to Webpack 5. In any case, you can now cancel the overlay by adding in your webpack.config.js:

module.exports = {
  //...
  devServer: {
    client: {
      overlay: false,
    },
  },
};

Or through the CLI: npx webpack serve --no-client-overlay

Taken from here: https://webpack.js.org/configuration/dev-server/#overlay

Solution 7 - Create React-App

In config/webpack.config.dev.js, comment out the following line in the entry array

require.resolve('react-dev-utils/webpackHotDevClient'),

And uncomment these two:

require.resolve('webpack-dev-server/client') + '?/',
require.resolve('webpack/hot/dev-server'),

Solution 8 - Create React-App

To avoid bundling in this large dev library in prod you can use a dynamic import:

yarn add react-error-overlay
if (process.env.NODE_ENV === 'development') {
  import('react-error-overlay').then(m => {
    m.stopReportingRuntimeErrors();
  });
}

Solution 9 - Create React-App

I think this makes sense but sometimes when you are typing and have an error boundary then the overlay pops up with each character stroke and is annoying. I can remove the handler I suppose.

Solution 10 - Create React-App

In the file webpack.config.js, comment the line:

 // require.resolve('react-dev-utils/webpackHotDevClient'),

And uncomment:

require.resolve('webpack-dev-server/client') + '?/',
require.resolve('webpack/hot/dev-server'),

In the file webpackDevServer.config.js, comment:

// transportMode: 'ws',
// injectClient: false,

Solution 11 - Create React-App

hide it with adblock

It is very useful to disable the errors temporarily so you don't have to comment/uncomment parts of your code that is not used at the moment, but it definitely will be after a few more changes.

The quickest solution is to just use adblock to pick the iframe with the errors.

It is trivial to toggle it with a single click to enable / disable adblock on the given page.

It is counter-intuitive to overlay the rendered page in development mode just to inform the user the newly imported objects or the recenlty created variables are not yet used.

I would say it is an arrow to the knee for beginners :)

Solution 12 - Create React-App

The css fix has changed:

body > hmr-error-overlay {
  display: none;
}

I'll also recommend adding this block on init so that you don't get silent errors:


window.addEventListener('error', function (e) {
  console.error(e.message);
  // prevent React's listener from firing
  e.stopImmediatePropagation();
  // prevent the browser's console error message
  e.preventDefault();
});

Solution 13 - Create React-App

I had the same problem and I have been digging in the create-react-app source for a long time. I can't find any way to disable it, but you can remove the listeners it puts in place, which effectivly stops the error message. Open the developerconsole and select the html tag. There you can remove the event listeners on error and unhandlerejection which is put in place by unhandledError.js. You can also close the error message by clicking the x in the upper right corner of the screen, and then you should see your message.

Solution 14 - Create React-App

There is no option for it.

But, if you strongly wanted to disable modal window, just comment out this line

https://github.com/facebook/create-react-app/blob/26f701fd60cece427d0e6c5a0ae98a5c79993640/packages/react-dev-utils/webpackHotDevClient.js#L173

Solution 15 - Create React-App

Gathering answers here together, I managed to solve this issue for myself.

Here is the package I created for this.

Solution 16 - Create React-App

If you are using the latest version with react-script >= 5.0.0, you just need to add an environment variable ESLINT_NO_DEV_ERRORS=true. https://create-react-app.dev/docs/advanced-configuration

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDaniel HildessonView Question on Stackoverflow
Solution 1 - Create React-AppJoe HaddadView Answer on Stackoverflow
Solution 2 - Create React-AppEithan pittView Answer on Stackoverflow
Solution 3 - Create React-ApphzhuView Answer on Stackoverflow
Solution 4 - Create React-AppOmry NachmanView Answer on Stackoverflow
Solution 5 - Create React-AppferalamilloView Answer on Stackoverflow
Solution 6 - Create React-AppAdamView Answer on Stackoverflow
Solution 7 - Create React-Appings0cView Answer on Stackoverflow
Solution 8 - Create React-AppDominicView Answer on Stackoverflow
Solution 9 - Create React-AppJimTheDevView Answer on Stackoverflow
Solution 10 - Create React-AppMrCheView Answer on Stackoverflow
Solution 11 - Create React-AppSzabolcs DombiView Answer on Stackoverflow
Solution 12 - Create React-AppBlack MambaView Answer on Stackoverflow
Solution 13 - Create React-AppJaniView Answer on Stackoverflow
Solution 14 - Create React-AppColChView Answer on Stackoverflow
Solution 15 - Create React-Appjeron-diovisView Answer on Stackoverflow
Solution 16 - Create React-AppMicael MotaView Answer on Stackoverflow