¿Cómo puedo saber si ReactJS está en modo de desarrollo desde JavaScript?

Estoy escribiendo un Mixin para ReactJS. Me gustaría que valide algo, pero solo cuando se use ReactJS en modo de desarrollo .

¿Cómo puedo determinar desde JavaScript si ReactJS está en modo de desarrollo o producción?

La fuente ReactJS usa una variable llamada __DEV__ para rastrear esto, pero no se exporta, por lo que no está disponible para su Mixin.

Sus consecuencias son, sin embargo. Cuando rompes un invariante, por ejemplo, el modo dev ReactJS te dará una buena descripción de lo que salió mal. En el modo de producción, generará un error genérico que le indicará que use la versión dev.

Podemos usar esto para build una function que determina si React está en modo dev:

 function isDevReact() { try { React.createClass({}); } catch(e) { if (e.message.indexOf('render') >= 0) { return true; // A nice, specific error message } else { return false; // A generic error message } } return false; // should never happen, but play it safe. }; 

Esto funciona porque la exception para no implementar un método de render es diferente en los dos modos:

 Development: "Invariant Violation: createClass(...): Class specification must implement a `render` method. Inline JSX script:16" Production: "Minified exception occurnetworking; use the non-minified dev environment for the full error message and additional helpful warnings. Inline JSX script:16" 

La palabra "render" es específica de la invariante que hemos violado, por lo que solo aparece en la exception de la versión dev.