TORNAR

Deixa d'Escampar process.env per Tot Arreu: Usa env-interpolation

2 min de lectura

Cansat de process.env escampat pel teu codi? env-interpolation és una llibreria TypeScript que resol marcadors ${VAR} i ${VAR:default} dins d'objectes de configuració. Recorre cadenes en objectes/arrays i mai toca les claus, per la qual cosa les formes es mantenen estables i predictibles—perfecte per a configuració en capes.

El vaig construir per a mcp-tool-selector, on necessitava configuració en capes sense filtrar secrets o escampar crides a process.env. Es va convertir en una utilitat afilada, així que la vaig publicar.

D'un cop d'ull

  • Resol marcadors de posició en valors només (objectes/arrays), claus intactes
  • Suporta valors predeterminats i resolució de múltiples passades
  • Zero dependències, TS-first, Node 18+, ESM/CJS

Docs & API: llegeix el repositori de GitHub i la pàgina del paquet npm.

Prova ràpida: carregar JSON → interpolar

config.json

{
"api": "${API_URL:https://api.example.com}",
"timeoutMs": "${TIMEOUT:5000}",
"flags": ["${PRIMARY:alpha}", "${SECONDARY:beta}"],
"service": {
"url": "${SERVICE_URL:${API_URL}/v1}",
"headers": { "x-tenant": "${TENANT:public}" }
}
}

load-config.ts

import { readFileSync } from "node:fs";
import { interpolate } from "env-interpolation";
const raw = readFileSync("config.json", "utf8");
const input = JSON.parse(raw);
const resolved = interpolate(input, {
API_URL: "https://api.example.com",
TIMEOUT: "8000",
TENANT: "public",
});
console.log(resolved);

Aquest és el meu segon projecte dissenyat amb IA (el primer va ser mcp-server-giphy), construït amb múltiples agents d'IA (Claude, Copilot, Gemini & Codex). Si les teves configs abasten fitxers, entorns i eines, això hauria de suavitzar algunes asprors.

Per Què No Usar process.env Directament?

Llegir variables d'entorn inline escampa la lògica de configuració per tot el teu codi:

// Enfocament dispers - difícil d'auditar i provar
const apiUrl = process.env.API_URL || "https://api.example.com";
const timeout = parseInt(process.env.TIMEOUT || "5000", 10);

Amb env-interpolation, la configuració roman centralitzada. Defineix l'estructura una vegada, i la llibreria gestiona la resolució:

// Enfocament centralitzat - config.json és la font de veritat
const config = interpolate(loadConfig("config.json"), process.env);

Això fa que les configs siguin més fàcils d'auditar, provar i compartir entre entorns.

Quan Usar env-interpolation

  • Configs multi-entorn: Desenvolupament, staging, producció amb la mateixa estructura
  • Configuració en capes: Config base amb sobreescriptures específiques per entorn
  • Configuració d'eines: Eines CLI que necessiten fitxers de config portables
  • Monorepos: Plantilles de config compartides entre paquets

Relacionat: Per a emmagatzematge segur de secrets sense fitxers de text pla, fes un cop d'ull a cross-keychain, que emmagatzema credencials en el gestor de credencials natiu del teu SO.