Próbuję ukryć mój klucz API, gdy zdecyduję się na github, i przejrzałem forum w poszukiwaniu wskazówek, szczególnie następujący post:
Jak ukryć klucz API w aplikacji create-react-app?
Wprowadziłem zmiany i ponownie uruchomiłem przędzę. Nie jestem pewien, co robię źle –– Dodałem .env
plik do katalogu głównego projektu (nazwałem go process.env
) i do pliku, który właśnie umieściłem REACT_APP_API_KEY = 'my-secret-api-key'
.
Myślę, że może to być sposób, w jaki fetch
dodaję klucz do mojego w App.js i próbowałem wielu formatów, w tym bez użycia literału szablonu, ale mój projekt nadal się nie kompiluje.
Każda pomoc jest bardzo ceniona.
performSearch = (query = 'germany') => {
fetch(`https://api.unsplash.com/search/photos?query=${query}&client_id=${REACT_APP_API_KEY}`)
.then(response => response.json())
.then(responseData => {
this.setState({
results: responseData.results,
loading: false
});
})
.catch(error => {
console.log('Error fetching and parsing data', error);
});
}
reactjs
environment-variables
api-key
Bianca M
źródło
źródło
process.env
nazywać go.env.local or .env.process
i przechowywać poza katalogiem srcnpm run start
.WARNING: Do not store any secrets (such as private API keys) in your React app! Environment variables are embedded into the build, meaning anyone can view them by inspecting your app's files.
Odpowiedzi:
4 kroki
npm install dotenv --save
Następnie dodaj następujący wiersz do swojej aplikacji.
require('dotenv').config()
Następnie utwórz
.env
plik w katalogu głównym aplikacji i dodaj do niego zmienne.// contents of .env REACT_APP_API_KEY = 'my-secret-api-key'
.env
do swojego.gitignore
pliku, aby Git go zignorował i nigdy nie trafiał na GitHub.Jeśli używasz aplikacji create-react-app , potrzebujesz tylko kroku 3 i 4, ale pamiętaj, że zmienna musi zacząć się od zmiennej
REACT_APP_
, aby działała.Odniesienie: https://create-react-app.dev/docs/adding-custom-environment-variables/
UWAGA - Konieczność ponownego uruchomienia aplikacji po dodaniu zmiennej w pliku .env.
Źródła - https://medium.com/@thejasonfile/using-dotenv-package-to-create-environment-variables-33da4ac4ea8f
źródło
require('dotenv').config()
? który plik?.env.example
pliku, w którym są ułożone definicje kluczy env. Następnie możesz skopiować.env.example
i utworzyć.env
plik (w fazie rozwoju i produkcji) zawierający prawidłowe wartości, np. Klucze, podstawowe adresy URL itp. Musisz dodać.env
plik do.gitignore
.Jestem więc nowy w React i znalazłem sposób, aby to zrobić.
To rozwiązanie nie wymaga żadnych dodatkowych pakietów.
Krok 1 ReactDocs
W powyższych dokumentach wspominają o eksporcie w Shell i innych opcjach, ta, którą spróbuję wyjaśnić, to użycie pliku .env
1.1 Utwórz plik Root / .env
Ważne uwagi MUSI zaczynać się od REACT_APP_
1.2 Dostęp do zmiennej ENV
#App.js file or the file you need to access ENV <p>print env secret to HTML</p> <pre>{process.env.REACT_APP_SECRET_NAME}</pre> handleFetchData() { // access in API call fetch(`https://awesome.api.io?api-key=${process.env.REACT_APP_SECRET_NAME}`) .then((res) => res.json()) .then((data) => console.log(data)) }
1.3 Problem dotyczący budowania koperty
Więc po wykonaniu kroku 1.1 | 2 nie działało, wtedy znalazłem powyższy problem / rozwiązanie. React read / create env, gdy jest skompilowany, więc musisz uruchomić npm start za każdym razem, gdy modyfikujesz plik .env, aby zmienne zostały zaktualizowane.
źródło
REACT_APP_
dziękuję. Żadna inna osoba o tym nie wspomniała.undefined
undefined
wykonałeś, czy zrestartowałeś aplikację po dodaniu nowej zmiennej do .env patrz 1.3process.env.REACT_APP_API_KEY
mówiundefined
.Dziś jest na to prostszy sposób.
Po prostu utwórz plik .env.local w swoim katalogu głównym i ustaw tam zmienne. W Twoim przypadku:
REACT_APP_API_KEY = 'my-secret-api-key'
Następnie nazywasz go swoim plikiem js w ten sposób:
React obsługuje zmienne środowiskowe od czasów [email protected]. Nie potrzebujesz do tego zewnętrznego pakietu.
https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env
* uwaga: proponuję .env.local zamiast .env, ponieważ create -ago-app dodaje ten plik do gitignore podczas tworzenia projektu.
Priorytet plików:
npm start: .env.development.local, .env.development, .env.local, .env
npm run build: .env.production.local, .env.production, .env.local, .env
npm test: .env.test.local, .env.test, .env (brak pliku .env.local)
Więcej informacji: https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables
źródło
Użytkownicy pakietu Webpack
Jeśli używasz webpacka, możesz zainstalować i używać
dotenv-webpack
wtyczki, aby to zrobić, wykonaj poniższe czynności:Zainstaluj pakiet
Utwórz
.env
plik// .env API_KEY='my secret api key'
Dodaj do
webpack.config.js
pliku// webpack.config.js const Dotenv = require('dotenv-webpack'); module.exports = { ... plugins: [ new Dotenv() ] ... };
Użyj go w swoim kodzie jako
Aby uzyskać więcej informacji i informacji o konfiguracji, odwiedź tutaj
źródło
1. Utwórz plik .env plik w folderze głównym
niektóre źródła preferują użycie
.env.development
i.env.production
ale nie jest to obowiązkowe.2. Nazwa Twojej VARIABLE -mus- zaczynać się od REACT_APP_YOURVARIABLENAME
wydaje się, że jeśli twoja zmienna środowiskowa nie zaczyna się w ten sposób, będziesz miał problemy
3. Dołącz swoją zmienną
aby dołączyć zmienną środowiskową, wystarczy umieścić w kodzie
process.env.REACT_APP_VARIABLE
źródło
console.log('process', process.env.REACT_APP_BASE_URL);
Musisz zainstalować npm install env-cmd
Utwórz .env w katalogu głównym i zaktualizuj w ten sposób & REACT_APP_ jest obowiązkowym przedrostkiem dla nazwy zmiennej.
REACT_APP_NODE_ENV="production" REACT_APP_DB="http://localhost:5000"
Zaktualizuj plik package.json
"scripts": { "start": "env-cmd react-scripts start", "build": "env-cmd react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }
źródło
dotenv
jako devDependencies:.env
plik w katalogu głównym:.env
plik jak poniżej & REACT_APP_ jest obowiązkowym prefiksem dla nazwy zmiennej.REACT_APP_BASE_URL=http://localhost:8000 REACT_APP_API_KEY=YOUR-API-KEY
Na przykład utworzyłem plik o nazwie
base.js
i zaktualizowałem go jak poniżej:export const BASE_URL = process.env.REACT_APP_BASE_URL; export const API_KEY = process.env.REACT_APP_API_KEY;
źródło
.env
pliku? Zdaję sobie sprawę, że musimy tworzyć.env.development
i.env.prod
pliki, ale jak rozróżnić je za pomocą Twojej metody?.env
plik w naszym.gitignore
. Dlatego podczas wdrażania po prostu kopiujemy.env
plik na nasz serwer i po prostu zmieniamy BASE_URL i inne niezbędne wartości. W ten sposób, gdy musi on wdrożyć najnowszy kod, po prostu ściągamy z git master i wdrażamy go. Nie myślimy o tym,.env
bo go ignorujemy i na samym początku ustawiamy go na naszym serwerze. Dzięki!REACT_APP_BASE_URL
w pliku .env?Jeśli otrzymujesz wartości jako
undefined
, powinieneś rozważyć ponowne uruchomienie serwera węzłów i ponowną kompilację.źródło