Šta su promenjive okruženja
Promenljive okruženja (eng. “Environment Variables“) koriste se na različitim mestima u razvoju softvera i IT infrastrukturi, kao npr. kod: operativnih sistema (“PATH” promenjiva koja definiše direktorijume u kojima operativni sitem traži izvršne fajlove), razvoja softvera (promenljive za čuvanje konfiguracionih parametara kao što su API ključevi, baze podataka, URL-ovi..), bezbednost (za čuvanje poverljivih informacija umesto hardkodovanja u aplikacioni kod).
Promenjive okruženja u Node
Promenjive okruženja su ključne komponente za rad sa Node.js aplikacijama, omogućavaju konfiguraciju aplikacije bez potrebe za menjanjem koda. Posebno korisna alatka pri radu sa različitim okruženjima (razvoj, testiranje ili produkcija).
Setovanje vrednosti promenjivih
Promenjive okružanja možete setovati na dva načina:
-
Direktno u komandnoj liniji terminala
- Unix/Linux:
1export PORT=3000
- Windows
1set PORT=3000
- Unix/Linux:
-
Unutar posebnih fajlova (.env )
Sa korišćenjem jednog fajla mi grupišemo sve promenjive i tako omogućavamo bolju organizaciju.
Dostupnost promenjivih
Da bi promenjiva bila dostupna negde u kodu aplikacije potrebno je da je naš kod ima pristup .env fajlu. Pristup promenjivama iz .env fajla se ostvaruje preko objekta “process”. To je globalni objekat koji pruža informacije i kontrolu nad trenutnim radnim procesom Node.js aplikacije. On je deo standardne Node.js biblioteke i dostupan je u svim modulima bez potrebe za uključivanjem dodatnih paketa. Za učitavanje (environment) promenljivih iz .env fajla u process.env je potrebno da instaliramo dotenv paket:
1 |
npm install dotenv |
Učitavanje sadržaja .env u process.env objekat
Nakon instalacije dotenv paketa, možemo da pozovemo metodu dotenv.config() koja će učitati sadržaj .env datoteke u “process.env”objekat. Pozivanje config() metode se može uraditi na dva načina:
-
Pozivanje config() metode iz koda:
123456import dotenv from 'dotenv';dotenv.config();// ilirequire('dotenv').config(); -
Koristeći skriptu u okviru package.json fajla:
1"start": "ts-node src/app.ts --env-file=.env"NAPOMENA:
Ako se env-file setuje u okviru script-e u package.json fajlu, tada nije potrebno da se poziva config() metoda u samom kodu!!!
Tek nakon toga se mogu koristiti ove statičke promenjive bilo gde u kodu na sledeći način:
1 2 3 4 |
// pristup promenljivim okruženja putem process.env const port = process.env.PORT; const dbUrl = process.env.DATABASE_URL; const host = process.env.HOSTNAME; |
NAPOMENA:
.env datoteku treba dodati u .gitignore fajl kako bi se izbeglo njeno deljenje sa verzionim kontrolama, čime se štite osetljive informacije. Obratite pažnju da se u produkciji ne zaboravi da se “ručno” napravi novi .env fajl jer se on ne šalje sa git-om !!!
Putanja do promenjive (“path”)
Ponekad je korisno imati različite .env datoteke za različita okruženja, na primjer, .env.development, .env.test, .env.production. Možeš učitati odgovarajuću datoteku na osnovu trenutnog okruženja na više načina:
Takodje dobro je da se tip okruženja definiše na nivou aplikacije, a to možemo uraditi na više načina.
- Direktno u kodu pri pozivanju config() metode, kada joj se prosledi path:
123456import dotenv from 'dotenv';dotenv.config({ path: '.env.development' })// ili sve u jednom redu:require('dotenv').config({ path: '.env.development' }); -
Definisati odgovarajući fajl u okviru skripti u package.json fajlu:
1"start": "ts-node src/app.ts --env-file=.env.production"
1"dev": "nodemon --watch src --exec ts-node src/app.ts --env-file=.env.development"NAPOMENA:
Ako se env-file setuje u okviru script-e u package.json fajlu, tada nije potrebno da se poziva config() metoda u samom kodu!!! -
Definisati NODE_ENV promenjivu, pa na osnovu nje dobijati path sa path:
.env.${env}
:- Definisanje NODE_ENV promenjive u samom .env fajlu:
1NODE_ENV=development - Definisanje NODE_ENV promenjive u terminalu pre pokretanja aplikacije:
1NODE_ENV=production ts-node app.ts -
Definisanje NODE_ENV promenjive u okviru skripte u package.json fajlu:
1"start": "NODE_ENV=production ts-node app.ts"
1"dev": "nodemon --watch src --exec ts-node src/app.ts NODE_ENV=development"
Nakon čega možemo koristi na sledeći način:
12const env = process.env.NODE_ENV || 'development';require('dotenv').config({ path: `.env.${env}` }); - Definisanje NODE_ENV promenjive u samom .env fajlu: