Úvod do premenných prostredia a ako ich používať

Oddelenie konfigurácie od aplikácie

Foto Antoine Dautry na Unsplash

Čo sú premenné prostredia?

Dve základné zložky ľubovoľného počítačového programovacieho jazyka sú premenné a konštanty. Rovnako ako nezávislé premenné v matematickej rovnici, preberajú hodnoty, ktoré menia výsledky programu. Premenné a konštanty predstavujú jedinečné miesta v pamäti obsahujúce údaje, ktoré program používa pri svojich výpočtoch. Rozdiel medzi nimi spočíva v tom, že hodnoty premenných sa môžu počas vykonávania meniť, zatiaľ čo konštantné hodnoty nemožno priradiť.

Premenná prostredia je premenná, ktorej hodnota je nastavená mimo programu, zvyčajne prostredníctvom funkcií zabudovaných do operačného systému alebo mikroservisu. Premenná prostredia sa skladá z páru meno / hodnota a môže sa vytvoriť ľubovoľné číslo, ktoré je v určitom čase k dispozícii ako referencia.

# Meteoritový dataset z portálu Nasa Open Data Portal
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"

Počas inicializácie aplikácie sa tieto načítajú do process.env a sprístupnia sa príponou názvu premennej prostredia, ako je uvedené nižšie.

načítanie (process.env.REACT_APP_METEORITE_STRIKE_DATASET)
.then ((odpoveď) => {
  return response.json ();
})
.then ((StrikesJSON) => {
  this.setState ({meteoriteStrikes: strikesJSON});
  this.setState ({isDataLoaded: true});
});

Za behu sa odkaz na názov premennej prostredia nahradí jej aktuálnou hodnotou. V takom prípade sa proces.env.REACT_APP_METEORITE_STRIKE_DATASET nahrádza hodnotou „https://data.nasa.gov/resource/y77d-th95.json“.

Primárnym prípadom použitia premenných prostredia je obmedziť potrebu modifikácie a opätovného vydania aplikácie z dôvodu zmien konfiguračných údajov. Z vyššie uvedeného príkladu, keď sa zmení adresa URLREACT_APP_METEORITE_STRIKE_DATASET, nie sú potrebné zmeny zdrojového kódu, testovanie a zavádzanie modifikovanej aplikácie.

Úprava a uvoľnenie kódu aplikácie je pomerne komplikované a zvyšuje riziko zavedenia nežiaducich vedľajších účinkov do výroby. Ak je URL definovaná namiesto premennej prostredia namiesto aplikácie, proces zmeny spočíva v kontrole platnosti novej adresy URL, aktualizácii zodpovedajúcej premennej prostredia pomocou príkazu operačného systému alebo aktualizácii konfiguračného súboru a testovaní ovplyvnených funkčných funkcií aplikácie. aby ste zaistili, že aplikácia bude fungovať podľa očakávaní.

Prípady použitia premenných prostredia zahŕňajú, ale nie sú obmedzené na údaje, ako napríklad:

  • Režim vykonávania (napr. Výroba, vývoj, inscenácia atď.)
  • Názvy domén
  • URL / URI rozhrania API
  • Verejné a súkromné ​​autentifikačné kľúče (zabezpečené iba v serverových aplikáciách)
  • Skupinové poštové adresy, napríklad adresy marketingu, podpory, predaja atď.
  • Názvy servisných účtov

Čo majú spoločné, ich dátové hodnoty sa zriedka menia a aplikačná logika ich považuje za konštanty, nie za premenlivé premenné.

Ďalej sa pozrime na to, ako využiť premenné prostredia pomocou natívneho operačného systému, balíka NPM dotenv a webpacku.

Premenné prostredia v NodeJS

Obrázok 1 - Premenné prostredia OS

Použitie premenných prostredia v aplikáciách typu backend sa pri definovaní premennej prostredia a jeho hodnoty spolieha na príkazy operačného systému. Správca systému ich môže definovať pomocou rozhrania príkazového riadku, zvyčajne to však dáva väčší zmysel pomocou skriptu shellu. Premenné prostredia zvyčajne nie sú globálne dostupné v rámci operačného systému, zvyčajne sú špecifické pre jednotlivé relácie. Napríklad pomocou príkazového riadku Linux:

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

Počas behu program NodeJS automaticky načíta premenné prostredia do process.env a sprístupní ich aplikácii. Napríklad načítanie (process.env.REACT_APP_METEORITE_STRIKE_DATASET).

Správa a manipulácia s premennými prostredia sa líši od operačného systému k operačnému systému. Toto sa tiež líši v rôznych prostrediach mikroprocesov, napríklad Heroku, kde sa riadenie premenných prostredia vykonáva pomocou administračného panela. Z tohto dôvodu je pred použitím premenných prostredia vo vašej aplikácii nevyhnutné porozumieť faktorom špecifickým pre danú platformu.

Jedným zo spôsobov, ako minimalizovať tieto rozdiely, je použitie balíka cross-env NPM, ktorý poskytuje príkazom nezávislým na operačnom systéme POSIX na nastavenie premenných prostredia.

Premenné prostredia v balíku dotenv

Podpora používania premenných prostredia v aplikáciách frontend nie je funkciou „out-of-the-box“ prehliadača alebo Javascriptu; na jej povolenie je potrebný balík ako dotenv. Pre záznam môžu frontend aj backend aplikácie využívať dotenv.

Používanie tohto balíka je také jednoduché,

import dotenv z „dotenv“;
dotenv.config ();
console.log (process.env.REACT_APP_METEORITE_STRIKE_DATASET);

Táto technika externalizuje údaje presunutím zo zdrojového kódu do premenných prostredia v súbore .env. Pridanie názvu súboru .env do .gitignore zabráni príkazom git push nahrať ich do repozitára GitHub, kde by pre verejné repozitáre bol k dispozícii každému.

Obrázok 2 - Použitie súboru .env

Premenné prostredia v .env sú formátované ako meno = hodnota, riadky začínajúce znakom # sa považujú za komentáre a prázdne riadky sa ignorujú. Napríklad,

# Meteoritový dataset z portálu Nasa Open Data Portal
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"

Mnoho populárnych balíčkov, ako napríklad Create React App (rea-scripts), Gatsby, GraphQL CLI, Node Lambda a ďalšie, už však obsahuje dotenv. Ak už niektorý z týchto balíkov používate, dotenv už môže byť k dispozícii na použitie vo vašej aplikácii. Napríklad vyššie uvedené útržky kódu sú z aplikácie generovanej aplikáciou Create React App, ktorá vyžaduje, aby premenné prostredia mali predponu REACT_APP_.

V prípade aplikácie Create React App nie je potrebné volať dotenv.config (), pretože node_modules / rea-scripts / config / env.js automaticky naplní process.env obsahom súboru .env pri spustení aplikácie. Príklad aplikácie Create React nájdete v repozitári Meteorite Explorer na GitHub.

Pretože prostredie prehliadača nie je bezpečné, aplikácie musia venovať osobitnú pozornosť tomu, aby nevystavovali citlivé informácie, ako napríklad tajomstvá aplikácií. Ďalšie informácie o tom, ako chrániť prostredia frontendu, nájdete v časti „Chráňte aktíva aplikácie: Ako zabezpečiť svoje tajomstvá“.

Premenné prostredia v webpacku

webpack je balík, ktorý transformuje, balí alebo balí veľa rôznych modulov, zdrojov a prostriedkov v aplikácii spoločne na použitie v prehliadači. Jedným z bežných spôsobov použitia webpacku je príprava aplikácie na nasadenie výroby. Napríklad zostavovací skript Create React App používa webpack na vytvorenie adresára build obsahujúceho produkčnú verziu aplikácie.

Aj keď webpack implementuje podporu pre používanie premenných prostredia, je to voľba príkazu webpack. Napríklad,

webpack - sk.NODE_ENV = miestne

Viaceré premenné prostredia sú podporované zadaním viac ako jednej voľby - env ​​v príkaze webpack. Tieto sú v konfiguračných súboroch webpacku (napr. Webpack.config.js) uvádzané ako env. s príponou názvu premennej prostredia. Napríklad, console.log (env.NODE_ENV).

konfiguračné súbory webpacku môžu tiež odkazovať na premenné prostredia definované operačným systémom pomocou process.env rovnako ako akýkoľvek iný modul Javascript. Zoberme si tento príklad z webpack.config.prod.js v aplikácii Create React App.

// Zdrojové mapy sú náročné na zdroje a môžu spôsobiť nedostatok pamäte pre veľké zdrojové súbory.
const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP! == 'false';

Zabalenie

„Abstrakcia privádza svet do zložitejších, variabilnejších vzťahov; dokáže vyťažiť krásu, alternatívne topografie, škaredosť a intenzívnu aktuálnosť zo zdanlivej nicoty. “- Jerry Saltz

Používanie premenných prostredia je jednou z techník, ktoré uľahčujú konfiguráciu aplikácie oddelením občasných zmien údajov od kódu. Akokoľvek jednoduchá je táto technika, jej použitie je ovplyvnené úvahami, ako je typ aplikácie (frontend alebo backend) a operačné prostredie (operačný systém alebo mikroprocesor).

Využívanie premenných prostredia je jednoduché, ale porozumenie ich nuansám a schopnosť ich efektívne a bezpečne využívať je jedným z faktorov, ktorý odlišuje skúsených vývojárov webu od neskúsených vývojárov. Rovnako ako v prípade každej technológie, trik nevie, ako niečo použiť, ale vie, kedy ho použiť.