react-transform-catch-errors
Version:
React Transform that catches errors inside React components
81 lines (58 loc) • 2.74 kB
Markdown
[](http://www.reactiflux.com)
A [React Transform](https://github.com/gaearon/babel-plugin-react-transform) that catches errors inside `render()` function and renders a React component with an error message instead.
It’s up to you to choose the React component to render an error message. For example, you may use [redbox-react](https://github.com/KeywordBrain/redbox-react) that imitates React Native “red screen of death”.
First, install the [Babel plugin](https://github.com/gaearon/babel-plugin-react-transform):
```
npm install --save-dev babel-plugin-react-transform
```
Then, install the transform:
```
npm install --save-dev react-transform-catch-errors
```
Finally, install the component for rendering errors, for example:
```js
npm install --save-dev redbox-react
```
You may also use a custom component instead.
Now edit your `.babelrc` to include `extra.babel-plugin-react-transform`.
It must be an array of the transforms you want to use:
```js
{
"stage": 0,
"env": {
// only enable it when process.env.NODE_ENV is 'development' or undefined
"development": {
"plugins": ["react-transform"],
"extra": {
// must be an object
"react-transform": {
// must be an array
"transforms": [{
"transform": "react-transform-catch-errors",
// now go the imports!
"imports": [
// the first import is your React distribution
// (if you use React Native, pass "react-native" instead)
"react",
// the second import is the React component to render error
// (it can be a local path too, like "./src/ErrorReporter")
"redbox-react",
// the third import is OPTIONAL!
// when specified, its export is used as options to the reporter.
// see specific reporter's docs for the options it needs.
// "./src/reporterOptions"
]
}]
// note: you can put more transforms into array
// this is just one of them!
}
}
}
}
}
```
**It is up to you to ensure that the transform is not enabled when you compile the app in production mode.** The easiest way to do this is to put React Transform configuration inside `env.development` in `.babelrc` and ensure you’re calling `babel` with `NODE_ENV=development`. See [babelrc documentation](https://babeljs.io/docs/usage/babelrc/#env-option) for more details about using `env` option.
MIT