Wykrywanie produkcji a programowanie Reaguj w czasie wykonywania

110

Czy w czasie wykonywania można wykryć, czy aktualna wersja React jest deweloperska czy produkcyjna? Chciałbym zrobić coś takiego:

if (React.isDevelopment) {
  // Development thing
} else {
  // Real thing
}
pfhayes
źródło

Odpowiedzi:

176

Najlepiej jest to zrobić emulując sposób działania Node za pomocą narzędzia do kompilacji - webpack, browserify - przez ekspozycję process.env.NODE_ENV. Zwykle będziesz mieć ustawiony na „produkcję” w wersji produkcyjnej i „rozwój” (lub niezdefiniowany) w wersji deweloperskiej.

Twój kod staje się więc:

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

Aby dowiedzieć się, jak to skonfigurować, zobacz envify lub Przekazywanie zmiennych zależnych od środowiska w pakiecie internetowym

David L. Walsh
źródło
To zadziałało dla mnie, gdy zainstalowałem browserifyi envify.
pfhayes
4
process is not definedna klienta.
trusktr
5
Musisz użyć narzędzia do kompilacji, takiego jak webpack.
David L. Walsh
9
Jeśli używasz aplikacji create-react-app, process.env.NODE_ENVbędzie to „programowanie” w trybie programowania.
Joseph238
3
Dodawanie do komentarza @ Joseph238 - podczas korzystania z aplikacji create-react- process.env.NODE_ENVzostanie zdefiniowane dla Ciebie i będziesz mieć do niego dostęp w dowolnym miejscu aplikacji. Szczegółowe informacje można znaleźć w dokumentacji React .
Shaung Cheng
9

Używam pliku pomocniczego (w Typescript):

import process from "process";

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

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

Następnie gdzie indziej używam go w ten sposób:

import isDev from "./helpers/DevDetect";

if (isDev())
{
    ...
}
James
źródło