Deixa d'Escampar process.env per Tot Arreu: Usa env-interpolation
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 provarconst 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 veritatconst 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.