Eksempler på forskellige måder at man kan bruge argumenter fra kommandolinjen til at påvirke afviklingen af et program.
Kommandolinje argumenter kan f.eks. benyttes således
const args = process.argv.slice(2)
console.log(args)
if(1 == args.length){
const name = args[0]
console.log(`Hello, ${name}!`)
} else {
console.log("Hello, world!")
}
Programmet giver dette output ved afvikling af med forskellig input argumenter.
$ node cli-args-demo.js
[]
Hello, world!
$ node cli-args-demo.js Bjarne
[ 'Bjarne' ]
Hello, Bjarne!
$ node cli-args-demo.js Finn, Find og Bjarne
[ 'Finn', 'Find', 'og', 'Bjarne' ]
Hello, world!
Det kan være fordelagtigt at benytte npm pakken minimist, hvis der er brug for mere end de aller simpleste argumenter. Det gør det langt nemmere at parse indholdet in i variabler, der kan benyttes i programmet.
const args = require('minimist')(process.argv.slice(2))
args['name']
console.log(args)
if(args.name !== undefined){
console.log(`Hello, ${args.name}!`)
} else {
console.log("Hello, world!")
}
Her er et eksempel på output fra programmet.
$ node cli-minimist-demo.js
{ _: [] }
Hello, world!
$ node cli-minimist-demo.js Bjarne
{ _: [ 'Bjarne' ] }
Hello, world!
$ node cli-minimist-demo.js Finn, Find og Bjarne
{ _: [ 'Finn', 'Find', 'og', 'Bjarne' ] }
Hello, world!
$ node cli-minimist-demo.js Find --name=Bjarne og Finn
{ _: [ 'Find', 'og', 'Finn' ], name: 'Bjarne' }
Hello, Bjarne!
Husk at installere minimist inden eksemplet køres, med kommandoen nmp install minimist
Er der brug for mere avanceret håndtering af argumenter på kommandolinjen, kan man benytte npm pakken yargs. Det giver blandt andet mulighed for at tilknytte beskrivelser, typer og aliaser for de forskellige argumenter.
Her er et eksempel på håndtering af mere indviklede argumenter på kommandolinjen.
const yargs = require('yargs');
const argv = yargs
.command('lyr', 'Tells whether an year is leap year or not', {
year: {
description: 'the year to check for',
alias: 'y',
type: 'number',
}
})
.option('time', {
alias: 't',
description: 'Tell the present Time',
type: 'boolean',
})
.help()
.alias('help', 'h')
.argv;
if (argv.time) {
console.log('The current time is: ', new Date().toLocaleTimeString());
}
if (argv._.includes('lyr')) {
const year = argv.year || new Date().getFullYear();
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
console.log(`${year} is a Leap Year`);
} else {
console.log(`${year} is NOT a Leap Year`);
}
}
console.log(argv);
For at kunne køre eksemplet kræver det at pakken yargs
er installeret, hvilket kan gøres med kommandoen npm i yargs
.
Her er indholdet af package.json
.
{
"name": "cli-args",
"version": "1.0.0",
"description": "",
"main": "cli-yargs-demo.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"yargs": "^17.2.1"
}
}
Her er et eksempel på output fra programmet.
$ node cli-yargs-demo.js
{ _: [], '$0': 'cli-yargs-demo.js' }
$ node cli-yargs-demo.js -h
cli-yargs-demo.js [command]
Commands:
cli-yargs-demo.js lyr Tells whether an year is leap year or not
--version Show version number [boolean]
-t, --time Tell the present Time [boolean]
$ node cli-yargs-demo.js --version
1.0.0
$ node cli-yargs-demo.js --help lyr
cli-yargs-demo.js lyr
Options:
--version Show version number [boolean]
-t, --time Tell the present Time [boolean]
-h, --help Show help [boolean]
-y, --year the year to check for [number]
$ node cli-yargs-demo.js lyr
2021 is NOT a Leap Year
{ _: [ 'lyr' ], '$0': 'cli-yargs-demo.js' }
$ node cli-yargs-demo.js lyr --time
The current time is: 22.48.45
2021 is NOT a Leap Year
{ _: [ 'lyr' ], time: true, t: true, '$0': 'cli-yargs-demo.js' }
$ node cli-yargs-demo.js lyr --time -y 3000
The current time is: 22.48.59
3000 is NOT a Leap Year
{
_: [ 'lyr' ],
time: true,
t: true,
y: 3000,
year: 3000,
'$0': 'cli-yargs-demo.js'
}