Виявлення виробництва проти розробки Реагуйте під час виконання


110

Чи можна виявити, чи є поточна версія React розробкою чи виробництвом під час виконання? Я хотів би зробити щось подібне:

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

Відповіді:


176

Це найкраще робити, наслідуючи спосіб роботи Node за допомогою інструмента побудови - webpack, browserify - шляхом викриття process.env.NODE_ENV. Як правило, для нього буде встановлено значення "production" у виробництві та "development" (або undefined) у dev.

Отже, ваш код стає:

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

Докладніше про те, як його налаштувати, див. У розділі envify або передача змінних, що залежать від середовища, у webpack


Це спрацювало для мене, як тільки я встановив browserifyі envify.
pfhayes

4
process is not definedна клієнта.
trusktr

5
Вам потрібно використовувати інструмент побудови, такий як webpack.
Девід Л. Уолш,

9
Якщо ви використовуєте create-response-app, process.env.NODE_ENVбуде "розробка" в режимі розробки.
Джозеф238

3
Додавання до коментаря @ Joseph238 - під час використання create-response-app process.env.NODE_ENVбуде визначено для вас, і ви матимете доступ до нього в будь-якому місці вашої програми. Докладніше див. У документації React .
Shaung Cheng

9

Я використовую допоміжний файл (у Typescript):

import process from "process";

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

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

Тоді в іншому місці я використовую його так:

import isDev from "./helpers/DevDetect";

if (isDev())
{
    ...
}

3

Я хотів отримати доступ до цього з index.html і бажав рішення, яке не передбачало б витягування веб-пакета або налаштування його за допомогою додаткових модулів, і я це придумав.

Джерела - це відповідь Давида вище та документація create-response-app для використання змінних середовища у файлі html

if ( ! '%NODE_ENV%' || '%NODE_ENV%' === 'development') {
  // dev code
} else {
  // production code    
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.