Üretimi ve geliştirmeyi algılama Çalışma zamanında tepki


103

Mevcut React sürümünün çalışma zamanında geliştirme mi yoksa üretim mi olduğunu tespit etmek mümkün mü? Bunun gibi bir şey yapmak istiyorum:

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

Yanıtlar:


167

Bu, en iyi şekilde, derleme aracınızla (web paketi, browsererify) bir şeyler yapmanın Düğüm yolunu taklit ederek yapılır process.env.NODE_ENV. Tipik olarak, üretimde "üretim" ve geliştirmede "geliştirme" (veya tanımlanmamış) olarak ayarlamanız gerekir.

Böylece kodunuz şöyle olur:

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

Nasıl kurulacağını öğrenmek için, kıskanmaya veya web paketinde ortama bağımlı değişkenleri aktarma konusuna bakın.


Bu benim için çalıştı, bir kez kurdum browserifyve envify.
pfhayes

4
process is not definedistemcide.
trusktr

5
Web paketi gibi bir derleme aracı kullanmanız gerekir.
David

8
Create-react-app kullanıyorsanız, process.env.NODE_ENVgeliştirme modunda "geliştirme" olacaktır.
Joseph238

3
@ Joseph238'in yorumuna ekleme - create-react-app kullanırken, process.env.NODE_ENVsizin için tanımlanacak ve uygulamanızın herhangi bir yerinden ona erişebileceksiniz. Ayrıntılı bilgi için React belgelerine bakın .
Shaung Cheng

9

Yardımcı dosya kullanıyorum (Typescript'te):

import process from "process";

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

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

Sonra başka bir yerde bunu böyle kullanıyorum:

import isDev from "./helpers/DevDetect";

if (isDev())
{
    ...
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.