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
}
pfhayes
sumber

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

David L. Walsh
sumber
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())
{
    ...
}
James
sumber