Environment variables
Any flag can fall back to an environment variable. Set env to the variable's name:
ts
import { command, flag } from 'jinju';
command({
description: 'Deploy',
flags: {
token: flag.string({ description: 'API token', env: 'API_TOKEN' }).required(),
port: flag.number({ description: 'Port', env: 'PORT' }).default(8080),
verbose: flag.count({ alias: 'v', description: 'Verbosity', env: 'VERBOSE' }),
},
run: ({ flags }) => {},
});Priority
The command line wins, then the variable, then the default. A value from the variable satisfies .required().
Parsing
Values from the environment are parsed and validated like command-line values, so flag.number({ env: 'PORT' }) checks that PORT is a number. Errors name where the value came from:
sh
error: Invalid value 'abc' for --port (from $PORT): must be a numberflag.booleanacceptstrue/false,1/0,yes/noandon/off, in any case.flag.countaccepts a whole number:VERBOSE=2.- Empty values (
API_TOKEN=) count as unset. - A
.multiple()flag gets a single value from its variable.
Help
Help shows the variable after the description:
sh
Flags:
--token <string> API token (required; env: API_TOKEN)Where variables come from
Variables are read from process.env by default. Pass env to jinju() to supply them yourself, for example in tests:
ts
const app = jinju({ commands: { deploy }, env: { API_TOKEN: 'test' } });
await app.run(['deploy']);