arg-env v2.0.0
arg-env
Node.js package to work with .env files in the same way as docker and docker-compose via --env-file or "env_file" in package.json
Installation
npm install --save-dev arg-envUsage
In addition, check the example of usage
Command-line arguments
node --require=arg-env index.js --env-file=1.env --env-file=2.envpackage.json
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
- Comments:
COMMENTED=comment #edis resolved tocomment - Quote agnostic:
V1=val,V2='val',V3="val"are resolved toval - Reuse:
EXPR=${VAR1} and ${VAR2}is resolved tovalue1 and value2 - Default value:
DEFAULT=${UNDEFINED:-val}is resolved toval
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
- Setup:
./setup.sh - Build:
./prebuild.sh- Launch commands:
./get_envs.sh
- Launch commands:
- Result: output.md
Envs list is taken from docker-compose/docker-compose.yml (service injected) and written to docker/.env
