Mendeteksi produksi vs. pengembangan Bereaksi saat runtime


108

Apakah mungkin untuk mendeteksi apakah versi React saat ini adalah pengembangan atau produksi pada saat runtime? Saya ingin melakukan sesuatu seperti ini:

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

Jawaban:


175

Ini paling baik dilakukan meniru cara Node melakukan sesuatu dengan alat build Anda - webpack, browserify - dengan mengekspos process.env.NODE_ENV. Biasanya, Anda akan menyetelnya ke "produksi" di prod dan "pengembangan" (atau tidak ditentukan) di dev.

Jadi kode Anda menjadi:

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

Untuk cara menyiapkannya, lihat envify atau Meneruskan variabel dependen lingkungan di webpack


Ini bekerja untuk saya, setelah saya menginstal browserifydan envify.
pfhayes

4
process is not definedpada klien.
trusktr

5
Anda perlu menggunakan alat build seperti webpack.
David L. Walsh

9
Jika Anda menggunakan create-react-app, process.env.NODE_ENVakan "pengembangan" dalam mode pengembangan.
Joseph238

3
Menambahkan ke komentar @ Joseph238 - saat menggunakan create-react-app, process.env.NODE_ENVakan ditentukan untuk Anda dan Anda memiliki akses ke sana di mana saja di aplikasi Anda. Lihat dokumentasi React untuk detailnya .
Shaung Cheng

9

Saya menggunakan file helper (di Typecript):

import process from "process";

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

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

Kemudian di tempat lain saya menggunakannya seperti ini:

import isDev from "./helpers/DevDetect";

if (isDev())
{
    ...
}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.