Ce face node --env-file
Un fișier .env ține setările care diferă de la un calculator la altul: portul, adresa bazei de date, chei de API. Fiecare rând are forma NUME=valoare; rândurile care încep cu # sunt comentarii, iar valorile pot sta între ghilimele (atunci pot conține spații sau mai multe rânduri).
node --env-file=.env app.mjs citește fișierul înainte să pornească scriptul și pune valorile în process.env. Poți da opțiunea de mai multe ori; la aceeași variabilă câștigă ultimul fișier. Variabilele deja existente în mediu (de exemplu setate în terminal) nu sunt suprascrise. Dacă fișierul lipsește, Node.js se oprește cu eroare; --env-file-if-exists doar afișează un mesaj și continuă.
Din cod, același lucru face process.loadEnvFile(cale) (implicit ./.env). Pentru a citi un text în format .env fără să atingi process.env există util.parseEnv(text), care întoarce un obiect. Toate valorile sunt șiruri: "3000", nu 3000.
Parametri
| Parametru | Descriere |
|---|---|
--env-file=cale |
Fișierul de citit. Eroare dacă nu există. |
--env-file-if-exists=cale |
Ca mai sus, dar continuă dacă fișierul lipsește. |
process.loadEnvFile([cale]) |
Varianta din cod; implicit citește ./.env. |
util.parseEnv(text) |
Transformă textul unui fișier .env într-un obiect, fără să modifice process.env. |
Exemple
Exemplul 1: Fișierul .env și opțiunea –env-file
Fișierul .env are rândurile NUME_APP=Magazin, PORT=3000, un comentariu și DB_PAROLA="secret 123". Scriptul config.mjs afișează trei valori. Fără opțiune, variabilele lipsesc.
// config.mjs
console.log(process.env.NUME_APP, process.env.PORT, typeof process.env.PORT);
console.log(process.env.DB_PAROLA);
// în terminal:
// node --env-file=.env config.mjs
// node config.mjs
Ieșire în terminal
Magazin 3000 string
secret 123
undefined undefined undefined
undefined
Exemplul 2: process.loadEnvFile din cod
Scriptul creează un fișier .env, îl încarcă și transformă portul în număr. Valorile din .env sunt mereu text.
import { writeFileSync } from "node:fs";
writeFileSync(".env", 'ORAS=Iași\nPORT=8080\nMESAJ="Bun venit la magazin"\n');
process.loadEnvFile(".env");
const port = Number(process.env.PORT);
console.log(process.env.ORAS, port + 1);
console.log(process.env.MESAJ);
Rezultat
Iași 8081
Bun venit la magazin
Exemplul 3: Citire fără process.env: util.parseEnv
import { parseEnv } from "node:util";
const config = parseEnv("# setări\nNUME=Ana\nNOTE=9,10,8\n");
console.log(config);
console.log(config.NOTE.split(",").map(Number));
Rezultat
[Object: null prototype] { NOTE: '9,10,8', NUME: 'Ana' }
[ 9, 10, 8 ]
Greșeli frecvente
- Pui fișierul
.envîn Git. Conține parole: adaugă-l în.gitignoreși păstrează în depozit doar un.env.examplecu valori de exemplu. - Compari
process.env.PORT === 3000: valoarea este șirul"3000". Transform-o cuNumber(); la fel,"false"este un șir nevid, deci adevărat într-unif. - Te aștepți ca
node --env-file=.env --run startsă dea variabilele scriptului dinpackage.json: variabilele încărcate cu--env-filenu ajung la comanda rulată de--run. Pune--env-fileîn comanda din script.
Comenzi înrudite
process.env: Obiectul cu variabilele de mediu ale procesului: configurări ca PORT, NODE_ENV sau chei de API, mereu ca șiruri.node --watch: Repornește automat scriptul când salvezi fișierul sau unul dintre modulele importate, fără nodemon.node --run: Rulează un script din câmpul „scripts” al package.json direct cu Node.js, mai repede decât npm run.util.parseArgs: Citește opțiunile din linia de comandă (–port 8080, -v, –fara-culori) fără pachete ca yargs sau commander.