Skip to content

askirmas/arg-env

Repository files navigation

arg-env

Node.js package to work with .env files in the same way as docker and docker-compose via argument --env-file=… in CLI, "env_file": […] in package.json and environment variables ENV_FILE_?=…

build@ci codecov Maintainability Scrutinizer Code Quality CodeFactor

dependencies Status version license

Installation

npm install --save-dev arg-env

Usage

In addition, check the example of usage

See Node docs

node --require=arg-env index.js --env-file=1.env --env-file=2.env

# jest
node -r arg-env node_modules/.bin/jest --env-file=test.env

See npm docs

{
  "config": {
    "env_file": [
      "3.env",
      "./4.env"
    ]
  },
  "scripts": {
    "start:dev": "node --require=arg-env index.js"
  }
}

Parser only

import { parse } from "arg-env"

Features

All specifications are taken from output of actual docker run

Syntax

Closure

Files are independent but rely on global environment

Precedence and overwrite

Files don’t overwrite global environment. Next file takes precedence over previous. In addition, files in package.json has less priority than in command line arguments.

Comparison

Other env JS packages hasn't command-line and package interfaces, more-over, didn't behave like docker: see details ./src/parse.spec.ts. Input is ./src/specs/input.env, output saved in ./src/specs/spec.json via ./src/specs/get.sh.

Tool name Quotes Isolated Inline comment Reuse Default value Weird names Error syntax Var of Var
docker-compose '," Yes Yes Yes Yes Yes No No
arg-env '," Yes Yes Yes Yes Yes Not yet Not yet
dotenv '," Yes No No No No No No
dotenv-expand '," No? No More No No No No
dotenv-extended '," No? No No No No No No
envfile No - No No No Other No No

Etc

Experiments with .env stuff

Envs list is taken from docker-compose/docker-compose.yml (service injected) and written to docker/.env