Uvod u varijable okoline i kako ih koristiti

Konfiguracija razdvajanja od aplikacije

Fotografirao Antoine Dautry na Unsplash-u

Što su varijable okoliša?

Dvije temeljne komponente bilo kojeg računalnog programskog jezika su varijable i konstante. Kao i nezavisne varijable u matematičkoj jednadžbi, one preuzimaju vrijednosti koje mijenjaju rezultate programa. Promjenjive i konstante predstavljaju jedinstvene memorijske lokacije koje sadrže podatke koje program koristi u svojim proračunima. Razlika između ove dvije je u tome što se vrijednosti varijabli mogu mijenjati tijekom izvođenja, dok se konstantne vrijednosti ne mogu preimenovati.

Varijabla okruženja je varijabla čija se vrijednost postavlja izvan programa, obično putem funkcionalnosti ugrađenih u operativni sustav ili mikroservis. Varijabla okruženja sastoji se od para ime / vrijednost, a bilo koji broj može se stvoriti i biti dostupan za referencu u određenom trenutku.

# Podaci meteorita s Nasa Open Data Portala
REACT_APP_METEORITE_LANDING_HOMEPAGE = "https://data.nasa.gov/Space-Science/Meteorite-Landings/gh4g-9sfh"
REACT_APP_METEORITE_STRIKE_DATASET = "https://data.nasa.gov/resource/y77d-th95.json"

Tijekom inicijalizacije aplikacije, oni se učitavaju u process.env i pristupaju sufiksom imena varijable okoline kao što je prikazano u nastavku.

dohvatiti (process.env.REACT_APP_METEORITE_STRIKE_DATASET)
. tada ((odgovor) => {
  povratni odgovor.json ();
})
. tada ((udaraJSON) => {
  this.setState ({meteoriteStrikes: udariJSON});
  this.setState ({isDataLoaded: true});
});

U vrijeme izvođenja, referenca na naziv varijable okoline zamjenjuje se njegovom trenutnom vrijednošću. U ovom slučaju, process.env.REACT_APP_METEORITE_STRIKE_DATASET zamjenjuje se njegovom vrijednošću "https://data.nasa.gov/resource/y77d-th95.json".

Primarni slučaj upotrebe za varijable okoline je ograničenje potrebe za izmjenom i ponovnim puštanjem aplikacije zbog promjena u konfiguracijskim podacima. Iz gornjeg primjera, kada se promijeni URL adrese REACT_APP_METEORITE_STRIKE_DATASET, nema potrebe za izmjenama izvornog koda, testiranjem i raspoređivanjem modificirane aplikacije.

Izmjena i oslobađanje koda aplikacije relativno je komplicirano i povećava rizik od uvođenja nepoželjnih nuspojava u proizvodnju. Kada je URL definiran varijablom okruženja umjesto aplikacije, postupak promjene sastoji se od provjere valjanosti novog URL-a, ažuriranja odgovarajuće varijable okruženja pomoću naredbe operacijskog sustava ili ažuriranja konfiguracijske datoteke i testiranja pogođenih funkcija aplikacije kako bi se osiguralo da aplikacija i dalje radi onako kako se i očekivalo.

Slučajevi korištenja za varijable okoline uključuju, ali nisu ograničeni na podatke, kao što su:

  • Način izvršenja (npr. Izrada, razvoj, postavljanje itd.)
  • Imena domena
  • URL-ovi API-ja / URI-a
  • Javni i privatni ključevi za provjeru autentičnosti (sigurni samo u poslužiteljskim aplikacijama)
  • Grupne adrese e-pošte, poput onih za marketing, podršku, prodaju itd.
  • Nazivi računa usluga

Zajedničko im je to što se njihove vrijednosti podataka rijetko mijenjaju, a logika aplikacije tretira ih kao konstante, a ne mijenjajuće varijable.

Zatim pogledajmo kako koristiti varijable okoline koristeći nativni operativni sustav, dotenv NPM paketa i webpack.

Okolišne varijable u NodeJS

Slika 1 - Varijable okruženja OS-a

Korištenje varijabli okruženja u sigurnosnim aplikacijama oslanja se na naredbe operacijskog sustava za definiranje varijable okoline i njezine vrijednosti. Administrator sustava može ih definirati pomoću sučelja naredbenog retka, ali to obično ima više smisla učiniti putem skripte shell. Promjenljive okoline obično nisu globalno dostupne u OS-u, obično su specifične za sesiju. Na primjer, pomoću Linux naredbenog retka:

setenv REACT_APP_METEORITE_LANDING_HOMEPAGE = "https://data.nasa.gov/Space-Science/Meteorite-Landings/gh4g-9sfh"

Tijekom izvođenja, NodeJS automatski učitava varijable okoline u process.env kako bi ih učinio dostupnima aplikaciji. Na primjer, dohvaćanje (process.env.REACT_APP_METEORITE_STRIKE_DATASET).

Upravljanje i manipuliranje varijablama okoliša razlikuju se od operacijskog do operativnog sustava. Također, to varira u različitim okruženjima mikroservisa, poput Herokua, gdje se upravljanje varijablama okruženja vrši pomoću administracijske ploče. Zbog toga je razumijevanje faktora specifičnih za platformu bitno prije upotrebe varijabli okoline u vašoj aplikaciji.

Jedan od načina da se te razlike umanji je korištenje cross-env NPM paketa koji operativnom sustavu pruža neovisnu POSIX kompatibilnu naredbu za postavljanje varijabli okoline.

Okolišne varijable u paketu dotenv

Podrška za korištenje varijabli okruženja u sučelnim aplikacijama nije značajka "izvan okvira" ni preglednika ni Javascript; potreban je paket poput dotenva da bi se to omogućilo. Za zapis, i frontend i rezervne aplikacije mogu koristiti dotenv.

Upotreba ovog paketa je jednostavna kao,

uvoz dotenv iz 'dotenv';
dotenv.config ();
console.log (process.env.REACT_APP_METEORITE_STRIKE_DATASET);

Ova tehnika eksternalizira podatke premještajući ih iz izvornog koda u varijable okoline u .env datoteci. Dodavanje .env naziva datoteke u .gitignore sprječava da je git push naredbe prenijele na GitHub repo gdje će, za javne repozicije, biti dostupan svima.

Slika 2 - .env Upotreba datoteke

Promjenjive sredine u .env oblikuju se kao ime = vrijednost, retkovi koji počinju s # tretiraju se kao komentari, a prazne linije se zanemaruju. Na primjer,

# Podaci meteorita s Nasa Open Data Portala
REACT_APP_METEORITE_LANDING_HOMEPAGE = "https://data.nasa.gov/Space-Science/Meteorite-Landings/gh4g-9sfh"
REACT_APP_METEORITE_STRIKE_DATASET = "https://data.nasa.gov/resource/y77d-th95.json"

Međutim, mnogi popularni paketi kao što su Create React App (react-script), Gatsby, GraphQL CLI, Node Lambda i još mnogo toga već uključuju dotenv. Ako već koristite jedan od tih paketa, dotenv će već biti dostupan za upotrebu u vašoj aplikaciji. Na primjer, gornji isječci koda potiču iz aplikacije koju je stvorio Create React App, a koja zahtijeva da varijable okoline prefiksa REACT_APP_.

U slučaju Create React App, nema potrebe pozivati ​​dotenv.config (), jer node_modules / react-skripte / config / env.js automatski pušta process.env sa sadržajem .env datoteke kada se aplikacija pokrene. Primjer aplikacije Create Create React potražite u repo Meteorite Explorer na GitHubu.

Budući da okruženje preglednika nije sigurna aplikacija, mora se posebno paziti da ne izlaže osjetljive podatke, poput tajni aplikacija. Dodatne informacije o zaštiti okruženja sučelja potražite u odjeljku "Zaštita imovine aplikacije: Kako osigurati svoje tajne".

Okolišne varijable u webpacku

webpack je paket koji pretvara, pakira ili pakira više različitih modula, resursa i sredstava u aplikaciji zajedno za upotrebu u pregledniku. Jedna uobičajena upotreba webpack-a je pripremiti aplikaciju za razvoj proizvodnje. Na primjer, skripta izrade aplikacije React App upotrebljava webpack za izradu direktorija gradnje koji sadrži produkcijsku verziju aplikacije.

Iako webpack implementira podršku za korištenje varijabli okruženja, to je kao opcija naredbe webpack. Na primjer,

webpack --env.NODE_ENV = lokalni

Podržane su više varijabli okruženja određivanjem više opcija --env u naredbi webpack. Na njih se poziva u konfiguracijskim datotekama webpack-a (npr. Webpack.config.js) kao env. sufiksan imenom varijable okoline. Na primjer, console.log (env.NODE_ENV).

Konfiguracijske datoteke webpacka mogu se odnositi i na varijable okoline koje je operativni sustav definirao korištenjem process.env kao i bilo koji drugi Javascript modul. Razmotrite ovaj primjer s webpack.config.prod.js u aplikaciji Create React.

// Izvorne mape su velike resurse i mogu uzrokovati problem s memorijom za velike izvorne datoteke.
const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP! == 'false';

Zamotavanje

„Apstrakcija dovodi svijet u složenije, promjenjive odnose; ona može izvući ljepotu, alternativne topografije, ružnoću i intenzivne stvarnosti iz naizgled ništavila. "- Jerry Saltz

Upotreba varijabli okruženja jedna je od tehnika za olakšavanje konfiguracije vaše aplikacije odvajanjem rijetko mijenjajućih podataka od koda. Koliko god ova tehnika bila jednostavna, na njezinu upotrebu utječu razmatranja poput vrste aplikacije (frontend ili backkend) i operativnog okruženja (operativni sustav ili mikroservis).

Iskorištavanje varijabli okruženja je jednostavno, ali razumijevanje njihovih nijansi i njihovo učinkovito i sigurno korištenje jedan je od čimbenika koji iskusne web programere izdvaja od neiskusnih programera. Kao i kod svake tehnologije, trik nije u tome kako nešto koristiti, nego kad trebate to koristiti.