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
}

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


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())
{
    ...
}

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.