Phát hiện sản xuất so với phát triển Phản ứng trong thời gian chạy


103

Có thể phát hiện phiên bản hiện tại của React là phát triển hay sản xuất trong thời gian chạy không? Tôi muốn làm điều gì đó như sau:

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

Câu trả lời:


167

Điều này được thực hiện tốt nhất để mô phỏng cách thức hoạt động của Node với công cụ xây dựng của bạn - webpack, Browserify - bằng cách hiển thị process.env.NODE_ENV. Thông thường, bạn sẽ đặt nó thành "production" trong sản phẩm và "phát triển" (hoặc không xác định) trong dev.

Vì vậy, mã của bạn trở thành:

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

Để biết cách thiết lập, hãy xem envify hoặc Truyền các biến phụ thuộc vào môi trường trong webpack


Điều này đã làm việc cho tôi, khi tôi đã cài đặt browserifyenvify.
pfhayes

4
process is not definedtrên máy khách.
trusktr 26/02/18

5
Bạn cần sử dụng một công cụ xây dựng như webpack.
David L. Walsh

8
Nếu bạn đang sử dụng create-react-app, process.env.NODE_ENVsẽ là "development" trong chế độ phát triển.
Joseph238, 27/02/19

3
Việc thêm vào nhận xét của @ Joseph238 - khi sử dụng create-react-app, process.env.NODE_ENVsẽ được xác định cho bạn và bạn có quyền truy cập vào nó ở bất kỳ đâu trong ứng dụng của mình. Xem tài liệu React để biết thêm chi tiết .
Shaung Cheng

9

Tôi sử dụng tệp trợ giúp (trong Typecript):

import process from "process";

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

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

Sau đó, ở những nơi khác tôi sử dụng nó như thế này:

import isDev from "./helpers/DevDetect";

if (isDev())
{
    ...
}

3

Tôi muốn truy cập vào cái này từ index.html và muốn một giải pháp không liên quan đến việc gỡ bỏ webpack hoặc định cấu hình nó với các mô-đun bổ sung và tôi đã nghĩ ra điều này.

Các nguồn là câu trả lời của David ở trêntài liệu tạo-phản ứng-ứng dụng để sử dụng các biến môi trường trong tệp html

if ( ! '%NODE_ENV%' || '%NODE_ENV%' === 'development') {
  // dev code
} else {
  // production code    
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.