node –env-file în Node.js

Rulare și linie de comandă Node.js 20.6 (stabil din 22.21 / 24.10)

Încarcă variabilele de mediu dintr-un fișier .env în process.env, fără pachetul dotenv.

Sintaxă
node --env-file=.env fișier.js
node --env-file-if-exists=.env.local fișier.js
process.loadEnvFile(cale)

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.example cu valori de exemplu.
  • Compari process.env.PORT === 3000: valoarea este șirul "3000". Transform-o cu Number(); la fel, "false" este un șir nevid, deci adevărat într-un if.
  • Te aștepți ca node --env-file=.env --run start să dea variabilele scriptului din package.json: variabilele încărcate cu --env-file nu 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.