react uygulaması oluşturmak .env dosyalarını almıyor mu?


111

Uygulamamı önyüklemek için react uygulaması oluştur kullanıyorum .

İki .envdosya ekledim .env.developmentve .env.productionkökte.

Benim .env.developmentiçerir:

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

Uygulamamı kullanarak react-scripts startve konsol kullanarak çalıştırdığımda process.envtükürüyor

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

Farklı şeyler denedim, ancak geliştirme dosyamdaki doğrulanabilirleri toplamıyor, neyi yanlış yapıyorum ?!

Directry yapısı:

/.env.development
/src/index.js

Package.json betiği:

"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",

Düzenle:

Benim değişkenler üzerinden @jamcreencia doğru işaret öneki edilmelidir ile REACT_APP.

Düzenle 2

Dosyayı adlandırırsam iyi çalışır, .envancak kullanırsam .env.developmentveya.end.production


Dosyanı gönderebilir misin package.json?
— Steve Chamaillard

2
process.envarka ucun (Düğüm veya kullandığınız her şey) okuyabileceği bir şeydir. Ön uç paketi, process.envtarayıcıda ne olduğu konusunda hiçbir fikre sahip değildir . Web paketini gruplama sırasında pakette geçirecek şekilde yapılandırabilir veya daha da kolay bir şekilde global bir değişken olarak oluşturduğunuz dizin dosyasında arka uçtan geçirebilirsiniz.
— Raul Rene

Muhtemelen durum böyle değil, ancak bununla birkaç kez karşılaştım ve bulduğum sorun şu ki, bilgisayarım çok fazla bellek kullandığında .env değişkenimi yükleyemiyorum. Ubuntu 16.4 kullanıyorum. değişkeni react-scripts start API_URL=http://localhost:3000/api CALLBACK_URL=http://localhost:3005/callbackhala görmüyorsanız terminalden yüklemeyi deneyin, bellek kullanımını azaltmak için sistemimi yeniden başlatırım ve tekrar deneyin genellikle bu benim için çözer.
— Femi Oni

@RaulRene create-react-app handles .env, daha fazla yapılandırmaya gerek duymadan kutudan çıkar
— Femi Oni

Yanıtlar:


230

İle create-react-app, REACT_APP_ona erişebilmek için değişken adına önek eklemeniz gerekir.

Misal:

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

Burada daha fazla bilgi görün


8
Bu hayati önem taşır. özledim ama evet önek ile çalışmayacak
— Femi Oni

7
Bu, kullandığım zaman işe yarıyor .envama .env.developmentya da değil .env.production?
— shenku

@shenku bunu sadece çalışır nedenini öğrenmek için yönetmek mü .envdeğil ile .env.developmentveenv.production
— Constantin Chirilă

Ön uç çalışması yapan Devs için, tarayıcıda NodeJ'leriniz olmadığı için web paketine ihtiyacınız olacak ... meh
— Stephane

2
Teşekkür ederim. Saatlerdir bir cevap arıyordum.
— Fahmid

53

.Env dosyanızın src klasörünün içinde değil, kök dizinde olduğundan emin olun.


1
Belgeleri okurken kök dizinde olması gerektiğini gördüm, yine de .env dosyamı src klasörüne eklemeyi başardım ... (facepalm) Cevabınız için teşekkürler.
— Corné

Aynı sorunu yaşadım, src klasörünün içindeyken işe yaramadı ancak 3.4.3 sürümünde kök klasöre geçtikten sonra çalıştı
— Vinod Kumar

28

Aynı sorunu yaşadım! Çözüm, düğüm sunucumla olan bağlantıyı kapatmaktı (bunu CTRL + C ile yapabilirsiniz). Ardından sunucunuzu 'npm run start' ile yeniden başlatın ve .env düzgün çalışmalıdır.

Kaynak: Github


20

Gibi birden fazla ortam kullanmak istiyorsanız .env.development .env.production

dotenv-cli paketini kullanın

proje kök klasörüne ekle .env.developmentve .env.production

ve package.json

"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"   
},

sonra çevreye göre inşa edin

npm run-script build-dev 

bu mu dotenvyoksa dotenv-cli
— Drazen Bjelovuk

2
Farklı ortamlar için farklı .env dosyalarına sahip olmak, artık "create-react-app: create-react-app docs" tarafından kutunun dışında destekleniyor . Dotenv'i açıkça kullanmaya gerek yok (create-react-app aslında bunu ortam değişkenlerini işlemek için perde arkasında kullanır)
— Marnix.hoh

@MariaJeysinghAnbu, bu sözdiziminin ait olduğu dotenv-clideğil dotenv: npmjs.com/package/dotenv-cli
— AMS777

@ AMS777 dotenv npm kullanıyorum dotenv -cli
— Maria Jeysingh Anbu

@MariaJeysinghAnbu, kullanmak istedim dotenvama bir hata aldım. Belgeleri kontrol ettim ama -ekomut satırı için bu seçeneği bulamadım . Ancak dotenv-clibelgelerde buldum . Bu yüzden söylüyordum. Sonunda kullanıyorum env-cmd, aynı anda sahip olmama dotenvve dotenv-cliyüklememe, bu da kafa karışıklığına yol açabilir.
— AMS777

10

İle ilgili olarak , env-cmd . VMois'in gitHub'daki nazik gönderisine göre , env-cmd güncellendi (yazılırken sürüm 9.0.1), ortam değişkenleri React projenizde aşağıdaki gibi çalışacaktır :

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

Senin içinde package.json dosyası.


1
Çok teşekkür ederim, bu yorum beni kurtardı. Create-react-app belgeleri bunu güncellemedi, bu yüzden neyin yanlış olduğunu
— buluyordum

1
Beni burada tamamen kurtardın. Bu şeyin üzerinde dönüyordum. Teşekkürler
— MDiesel

biri bu adama madalya
— veriyor

7

Bu amaçla env-cmd modülü bulunmaktadır. Npm ile yükleyin, npm i env-cmdardından package.jsondosyanıza scriptsbölüm:

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

Proje kökünüzde aynı env değişkenleriyle ancak farklı değerlerle iki dosya oluşturmanız gerekir:

.env.development
.env.production

Sonra onları halktan dışlayın. Bunun için .gitignoredosyanıza iki satır ekleyin:

.env.development
.env.production

Dolayısıyla bu, geliştirme ve prod için farklı env değişkenlerini kullanmanın uygun bir yoludur.


tam yolu kullanmayı deneyin, örneğin: ./node_modules/.bin/env-cmd
— Nastro

ama cevabımda bu yaklaşımı önermiyorum. Şimdi react'in .env ile çalışmak için bir tamirci sağladığını biliyorum
— Nastro

6

Aynı sorunu yaşıyordum, ancak .env dosyamın JS yerine YAML biçiminde olmasıydı .

Öyleydi

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

ama olması gerekiyordu

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

Çok basit ama güzel bir yer. Ben de aynısını yaptım ve ağaçların odununu göremedim. Teşekkürler
— Andy Allison

Bunun için teşekkürler! Bu küçük hatayı fark etmeden bütün gün arıyordum :)
— chia yongkang

3

Eğer .envdosya çalışır ancak .env.developmentya .env.production, o zaman boş bir oluşturmaz .envo ikisi birlikte dosyayı. Neden bilmiyorum ama bu benim için çalışıyor.


0

Ve env-dosyasında API anahtarından sonra noktalı virgül kullanmamayı unutmayın.

REACT_APP_API_KEY = 'ae87cec695cc4heheh639d06c9274a';

olmalı

REACT_APP_API_KEY = 'ae87cec695cc44heheh1639d06c9274a'

bu benim hatamdı


-1

En son react-script'lerden (3.2.0) itibaren, söylemek kadar basit

PORT=4000
BROWSER=none

kök klasörde olması gereken .env veya .env.development dosyanızda (..etc).

O zaman REACT_APP öneki ile ÇALIŞMAYACAKTIR (belgeler güncelliğini yitirmiştir sanırım) ve herhangi bir ekstra npm paketi gerektirmez (react-betikleri zaten dotenv 6.2.0 içerir)


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.