Detectar producción frente a desarrollo React en tiempo de ejecución

103

¿Es posible detectar si la versión actual de React es de desarrollo o producción en tiempo de ejecución? Me gustaría hacer algo como esto:

if (React.isDevelopment) {
  // Development thing
} else {
  // Real thing
}
pfhayes
fuente

Respuestas:

167

Esto se hace mejor emulando la forma de Node de hacer las cosas con su herramienta de compilación - webpack, browserify - exponiendo process.env.NODE_ENV. Normalmente, lo tendrá configurado en "producción" en prod y "desarrollo" (o indefinido) en dev.

Entonces tu código se convierte en:

if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {
    // dev code
} else {
    // production code
}

Para saber cómo configurarlo, consulte envify o Pasando variables dependientes del entorno en webpack

David L. Walsh
fuente
Esto funcionó para mí, una vez que instalé browserifyy envify.
pfhayes
4
process is not defineden el cliente.
trusktr
5
Necesitas usar una herramienta de construcción como webpack.
David
8
Si está utilizando create-react-app, process.env.NODE_ENVestará "desarrollo" en modo de desarrollo.
Joseph 238
3
Agregar al comentario de @ Joseph238: cuando use create-react-app, process.env.NODE_ENVse definirá para usted y tendrá acceso a él en cualquier lugar de su aplicación. Consulte la documentación de React para obtener más detalles .
Shaung Cheng
9

Yo uso un archivo auxiliar (en TypeScript):

import process from "process";

const development: boolean = !process.env.NODE_ENV || process.env.NODE_ENV === 'development';

export default function isDev(): boolean
{
    return development;
}

Luego en otro lugar lo uso así:

import isDev from "./helpers/DevDetect";

if (isDev())
{
    ...
}
James
fuente