Używam aplikacji Create React do załadowania mojej aplikacji.
Dodałem dwa .env
pliki .env.development
iw .env.production
katalogu głównym.
Moje .env.development
obejmuje:
API_URL=http://localhost:3000/api
CALLBACK_URL=http://localhost:3005/callback
Kiedy uruchamiam moją aplikację za pomocą react-scripts start
konsoli i process.env
wypluwa ją
{ NODE_ENV: "development", PUBLIC_URL: "" }
Próbowałem różnych rzeczy, ale po prostu nie wychwytuję zmiennych w moim pliku programistycznym, co robię źle ?!
Struktura Directry to:
/.env.development
/src/index.js
Skrypt Package.json to:
"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",
Edytować:
@jamcreencia słusznie zauważył moje zmienne powinny być poprzedzone z REACT_APP
.
Edytuj 2
Działa dobrze, jeśli nadam nazwę plikowi, .env
ale nie, jeśli użyję .env.development
lub.end.production
reactjs
create-react-app
shenku
źródło
źródło
package.json
plik?process.env
jest czymś, co zaplecze (Node lub cokolwiek innego) może odczytać. Pakiet front-end nie ma pojęcia, coprocess.env
jest, ponieważ działa w przeglądarce. Możesz skonfigurować pakiet internetowy, aby przekazywał go w pakiecie podczas tworzenia pakietu, a nawet łatwiej możesz przekazać go z zaplecza w pliku indeksu, który renderujesz jako zmienną globalną.react-scripts start API_URL=http://localhost:3000/api CALLBACK_URL=http://localhost:3005/callback
jeśli nadal ich nie widzisz, zrestartowałbym system, aby zmniejszyć zużycie pamięci i spróbuj ponownie, zwykle to rozwiązuje problem.Odpowiedzi:
W programie
create-react-app
musisz poprzedzićREACT_APP_
nazwę zmiennej, aby mieć do niej dostęp.Przykład:
REACT_APP_API_URL=http://localhost:3000/api REACT_APP_CALLBACK_URL=http://localhost:3005/callback
Zobacz więcej informacji tutaj
źródło
.env
ale nie dla.env.development
lub.env.production
?.env
i nie z.env.development
ienv.production
Upewnij się, że plik .env znajduje się w katalogu głównym, a nie w folderze src.
źródło
Miałem ten sam problem! Rozwiązaniem było zamknięcie połączenia z moim serwerem węzłów (możesz to zrobić za pomocą CTRL + C). Następnie uruchom ponownie serwer za pomocą polecenia „npm run start”, a plik env powinien działać poprawnie.
Źródło: Github
źródło
Jeśli chcesz korzystać z wielu środowisk, takich jak
.env.development
.env.production
użyj pakietu dotenv-cli
dodaj
.env.development
i.env.production
w folderze głównym projektui plik 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" },
następnie buduj zgodnie ze środowiskiem, np
źródło
dotenv
czydotenv-cli
?dotenv-cli
, a niedotenv
: npmjs.com/package/dotenv-clidotenv
ale wystąpił błąd. Sprawdziłem dokumentację, ale nie znalazłem tej-e
opcji dla wiersza poleceń. Jednak znalazłem to wdotenv-cli
dokumentacji. Dlatego mówiłem. W końcu używamenv-cmd
, a nie mamdotenv
idotenv-cli
instaluję w tym samym czasie, co może prowadzić do nieporozumień.Odnośnie env-cmd . Zgodnie z uprzejmym postem VMois na gitHubie , env-cmd został zaktualizowany (wersja 9.0.1 w chwili pisania), zmienne środowiskowe będą działać w twoim projekcie React w następujący sposób :
"scripts": { "build:local": "env-cmd -f ./.env.production.local npm run build", "build:production": "env-cmd -f ./.env.production npm run build" }
W pliku package.json .
źródło
Do tego celu służy moduł env-cmd . Zainstaluj przez npm,
npm i env-cmd
a następnie w swoimpackage.json
pliku wscripts
sekcji:"scripts": { "start": "env-cmd .env.development react-scripts start", "build": "GENERATE_SOURCEMAP=false env-cmd .env.production react-scripts build", }
W katalogu głównym projektu musisz utworzyć dwa pliki z tymi samymi zmiennymi env, ale z różnymi wartościami:
Następnie wyklucz je z publicznego. W tym celu w swoim
.gitignore
pliku dodaj dwie linie:Jest to więc właściwy sposób na użycie różnych zmiennych env dla dev i prod.
źródło
Miałem ten sam problem, ale to dlatego, że miałem plik .env w formacie YAML zamiast JS.
To było
REACT_APP_API_PATH: 'https://my.api.path'
ale musiało być
REACT_APP_API_PATH = 'https://my.api.path'
źródło
Jeśli
.env
plik działa, ale.env.development
lub.env.production
nie, utwórz pusty.env
plik obok tych dwóch. Nie wiem dlaczego, ale to działa dla mnie.źródło
I pamiętaj, aby nie wstawiać średnika po kluczu API w pliku env.
REACT_APP_API_KEY = 'ae87cec695cc4heheh639d06c9274a';
Powinien być
REACT_APP_API_KEY = 'ae87cec695cc44heheh1639d06c9274a'
to był mój błąd
źródło
W przypadku najnowszych skryptów reagowania (3.2.0) jest to tak proste, jak powiedzenie
PORT=4000 BROWSER=none
w pliku .env lub .env.development (..etc), który powinien znajdować się w folderze głównym.
NIE będzie działać z prefiksem REACT_APP (wydaje mi się, że dokumenty są nieaktualne) i NIE wymaga żadnych dodatkowych pakietów npm (react-scripts zawiera już dotenv 6.2.0)
źródło