tạo ứng dụng phản ứng không chọn tệp .env?


111

Tôi đang sử dụng ứng dụng tạo phản ứng để khởi động ứng dụng của mình.

Tôi đã thêm hai .envtệp .env.development.env.productiontrong thư mục gốc.

Của tôi .env.developmentbao gồm:

API_URL=http://localhost:3000/api
CALLBACK_URL=http://localhost:3005/callback

Khi tôi chạy ứng dụng của mình bằng cách sử dụng react-scripts startvà giao diện điều khiển, process.envnó sẽ phát ra

{ NODE_ENV: "development", PUBLIC_URL: "" }

Tôi đã thử nhiều thứ khác nhau, nhưng nó chỉ không chọn được các xác minh trong tệp phát triển của tôi, tôi đang làm gì sai ?!

Cấu trúc thư mục là:

/.env.development
/src/index.js

Tập lệnh Package.json là:

"start": "export PORT=3005; npm-run-all --parallel server:start client:start",
    "client:start": "export PORT=3005; react-scripts start",
    "server:start": "node server.js",
    "build": "react-scripts build",

Biên tập:

@jamcreencia chỉ đúng ra biến của tôi nên được bắt đầu với REACT_APP.

Chỉnh sửa 2

Nó hoạt động ổn nếu tôi đặt tên tệp .envnhưng không hoạt động nếu tôi sử dụng .env.developmenthoặc.end.production


Bạn có thể đăng package.jsontệp của bạn ?
Steve Chamaillard

2
process.envlà thứ mà back-end (Node hoặc bất cứ thứ gì bạn đang sử dụng) có thể đọc được. Gói giao diện người dùng không có ý tưởng gì process.envkhi nó chạy trong trình duyệt. Bạn có thể định cấu hình webpack để chuyển nó vào gói khi nhóm hoặc thậm chí dễ dàng hơn bạn có thể chuyển nó từ back-end trong tệp chỉ mục mà bạn đang hiển thị dưới dạng biến toàn cục.
Raul Rene

có lẽ không phải vậy, nhưng tôi đã gặp phải trường hợp này một vài lần và vấn đề tôi phát hiện ra là khi máy tính của tôi sử dụng nhiều bộ nhớ, tôi không tải được biến .env của mình. Tôi sử dụng ubuntu 16.4. thử tải biến thể từ thiết bị đầu cuối react-scripts start API_URL=http://localhost:3000/api CALLBACK_URL=http://localhost:3005/callbacknếu bạn vẫn không thấy chúng, tôi sẽ khởi động lại hệ thống của mình để giảm mức sử dụng bộ nhớ và thử lại thường thì điều này sẽ giải quyết cho tôi.
Femi Oni

@RaulRene tạo-phản ứng ứng dụng xử lý .env ra khỏi hộp cho bạn không cần cho cấu hình thêm
Femi Oni

Câu trả lời:


230

Với create-react-app, bạn cần phải thêm tiền tố REACT_APP_vào tên biến để có thể truy cập nó.

Thí dụ:

REACT_APP_API_URL=http://localhost:3000/api
REACT_APP_CALLBACK_URL=http://localhost:3005/callback

Xem thêm thông tin tại đây


8
Đây là điều quan trọng. tôi bị mất nó, nhưng yeah nó sẽ không làm việc với tiền tố
Femi Oni

7
Điều này hoạt động khi tôi sử dụng .envnhưng không cho .env.developmenthoặc .env.production?
shenku

@shenku Bạn có quản lý để tìm ra lý do tại sao nó chỉ hoạt động với .envvà không hoạt động với .env.developmentenv.production
Constantin Chirila

Đối với những nhà phát triển làm công việc front-end, vì bạn không có NodeJ trong trình duyệt, bạn sẽ cần webpack ... meh
Stephane

2
Cảm ơn bạn. Tôi đã tìm kiếm câu trả lời trong nhiều giờ.
Fahmid

54

Đảm bảo rằng tệp .env của bạn nằm trong thư mục gốc, không phải bên trong thư mục src.


1
Mặc dù, trong khi đọc tài liệu, tôi thấy nó phải nằm trong thư mục gốc, tôi vẫn quản lý để thêm tệp .env của mình trong thư mục src ... (facepalm) Cảm ơn câu trả lời của bạn.
Corné

Tôi gặp vấn đề tương tự, nó không hoạt động khi bên trong thư mục src nhưng nó hoạt động sau khi chuyển vào thư mục gốc trong phiên bản 3.4.3
Vinod Kumar

28

Có cùng một vấn đề này! Giải pháp là đóng kết nối với máy chủ nút của tôi (bạn có thể thực hiện việc này bằng CTRL + C). Sau đó, khởi động lại máy chủ của bạn với 'npm run start' và .env sẽ hoạt động bình thường.

Nguồn: Github


20

Nếu bạn muốn sử dụng nhiều môi trường như .env.development .env.production

sử dụng gói dotenv-cli

thêm .env.development.env.productiontrong thư mục gốc của dự án

và package.json của bạn

"scripts": {
    "start": "react-app-rewired start",
    "build-dev": "dotenv -e .env.development react-app-rewired build",
    "build-prod": "dotenv -e .env.production react-app-rewired build",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test --env=jsdom",
    "eject": "react-scripts eject"   
},

sau đó xây dựng theo môi trường như

npm run-script build-dev 

cái này dotenvhay dotenv-cli?
Drazen Bjelovuk

2
Việc có các tệp .env khác nhau cho các môi trường khác nhau hiện cũng được hỗ trợ ngay lập tức bởi tài liệu create-react-app: create-react-app . Không cần sử dụng dotenv một cách rõ ràng (ứng dụng tạo-phản ứng thực sự sử dụng nó đằng sau hậu trường để xử lý các biến môi trường)
Marnix.hoh

@MariaJeysinghAnbu, cú pháp đó thuộc về dotenv-cli, không phải dotenv: npmjs.com/package/dotenv-cli
AMS777

@ AMS777 Tôi đang sử dụng dotenv npm không phải dotenv-cli
Maria Jeysingh Anbu

@MariaJeysinghAnbu, tôi muốn sử dụng dotenvnhưng bị lỗi. Tôi đã kiểm tra tài liệu nhưng không tìm thấy -etùy chọn đó cho dòng lệnh. Tuy nhiên tôi đã tìm thấy nó trên dotenv-clitài liệu. Đó là lý do tại sao tôi đã nói. Cuối cùng tôi đang sử dụng env-cmd, không phải có dotenvdotenv-clicài đặt cùng một lúc, điều này có thể dẫn đến nhầm lẫn.
AMS777

10

Về env-cmd . Theo bài đăng loại của VMois trên gitHub , env-cmd đã được cập nhật (phiên bản 9.0.1 khi viết), các biến môi trường sẽ hoạt động như sau trên dự án React của bạn :

"scripts": {
    "build:local": "env-cmd -f ./.env.production.local npm run build",
    "build:production": "env-cmd -f ./.env.production npm run build"
  }

Trong tệp package.json của bạn .


1
Cảm ơn bạn rất nhiều, bình luận này đã cứu tôi. Tài liệu tạo-phản ứng-ứng dụng chưa cập nhật điều này, vì vậy tôi đang tìm hiểu điều gì sai
CKA

1
Bạn đã hoàn toàn cứu tôi ở đây. Tôi đã quay về điều này. Cảm ơn bạn
MDiesel

ai đó trao huy chương cho anh chàng này
Rittesh PV

7

Đối với mục đích này có mô-đun env-cmd . Cài đặt qua npm npm i env-cmdsau đó trong package.jsontệp của bạn trong scriptsphần:

  "scripts": {
    "start": "env-cmd .env.development react-scripts start",
    "build": "GENERATE_SOURCEMAP=false env-cmd .env.production react-scripts build",
  }

Trong dự án gốc của bạn, bạn phải tạo hai tệp có cùng biến env nhưng có các giá trị khác nhau:

.env.development
.env.production

Sau đó, loại trừ chúng khỏi công khai. Đối với điều này trong .gitignoretệp của bạn, hãy thêm hai dòng:

.env.development
.env.production

Vì vậy, đây là một cách thích hợp để sử dụng các biến env khác nhau cho dev và prod.


cố gắng sử dụng đường dẫn đầy đủ, như: ./node_modules/.bin/env-cmd
Nastro

nhưng tôi không khuyến nghị cách tiếp cận trong câu trả lời của tôi. Bây giờ tôi biết rằng phản ứng cung cấp cho xây dựng trong cơ khí để làm việc với .env
Nastro

6

Tôi cũng gặp sự cố tương tự, nhưng đó là do tôi có tệp .env ở định dạng YAML thay vì JS.

Nó đã

REACT_APP_API_PATH: 'https://my.api.path'

nhưng nó cần phải

REACT_APP_API_PATH = 'https://my.api.path'

Một điểm đơn giản nhưng tốt. Tôi đã làm như vậy và không thể nhìn thấy gỗ cho những cái cây. Cảm ơn
Andy Allison

Cám ơn vì cái này! Tôi đã tìm kiếm cả ngày mà không nhận thấy lỗi nhỏ này :)
chia yongkang

3

Nếu .envtập tin hoạt động nhưng .env.developmenthay .env.productionkhông, sau đó tạo ra một sản phẩm nào .envtập tin bên cạnh những hai. Tôi không biết tại sao nhưng điều này hiệu quả với tôi.


0

Và hãy nhớ không có dấu chấm phẩy sau khóa API trong tệp env.

REACT_APP_API_KEY = 'ae87cec695cc4heheh639d06c9274a';

nên là

REACT_APP_API_KEY = 'ae87cec695cc44heheh1639d06c9274a'

đó là lỗi của tôi


-1

Đối với các kịch bản phản ứng mới nhất (3.2.0), nó đơn giản như nói

PORT=4000
BROWSER=none

trong tệp .env hoặc .env.development (..etc) của bạn được cho là nằm trong thư mục gốc.

Nó sẽ KHÔNG hoạt động với tiền tố REACT_APP sau đó (tôi đoán là tài liệu đã lỗi thời) và nó KHÔNG yêu cầu bất kỳ gói npm bổ sung nào (các tập lệnh phản ứng đã bao gồm dotenv 6.2.0)


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.