- Notifications
You must be signed in to change notification settings - Fork996
yargs the modern, pirate-themed successor to optimist.
License
yargs/yargs
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Yargs be a node.js library fer hearties tryin' ter parse optstrings
Yargs helps you build interactive command line tools, by parsing arguments and generating an elegant user interface.
It gives you:
- commands and (grouped) options (
my-program.js serve --port=5000
). - a dynamically generated help menu based on your arguments:
mocha [spec..]Run tests with MochaCommands mocha inspect [spec..] Run tests with Mocha [default] mocha init <path> create a client-side Mocha setup at <path>Rules & Behavior --allow-uncaught Allow uncaught errors to propagate [boolean] --async-only, -A Require all tests to use a callback (async) or return a Promise [boolean]
- bash-completion shortcuts for commands and options.
- andtons more.
Stable version:
npm i yargs
Bleeding edge version with the most recent features:
npm i yargs@next
#!/usr/bin/env nodeconstyargs=require('yargs/yargs')const{ hideBin}=require('yargs/helpers')constargv=yargs(hideBin(process.argv)).parse()if(argv.ships>3&&argv.distance<53.5){console.log('Plunder more riffiwobbles!')}else{console.log('Retreat from the xupptumblers!')}
$ ./plunder.js --ships=4 --distance=22Plunder more riffiwobbles!$ ./plunder.js --ships 12 --distance 98.7Retreat from the xupptumblers!
Note:
hideBin
is a shorthand forprocess.argv.slice(2)
. It has the benefit that it takes into account variations in some environments, e.g.,Electron.
#!/usr/bin/env nodeconstyargs=require('yargs/yargs')const{ hideBin}=require('yargs/helpers')yargs(hideBin(process.argv)).command('serve [port]','start the server',(yargs)=>{returnyargs.positional('port',{describe:'port to bind on',default:5000})},(argv)=>{if(argv.verbose)console.info(`start server on :${argv.port}`)serve(argv.port)}).option('verbose',{alias:'v',type:'boolean',description:'Run with verbose logging'}).parse()
Run the example above with--help
to see the help for the application.
yargs has type definitions at@types/yargs.
npm i @types/yargs --save-dev
See usage examples indocs.
As ofv16
,yargs
supportsDeno:
importyargsfrom'https://deno.land/x/yargs@v17.7.2-deno/deno.ts'import{Arguments}from'https://deno.land/x/yargs@v17.7.2-deno/deno-types.ts'yargs(Deno.args).command('download <files...>','download a list of files',(yargs:any)=>{returnyargs.positional('files',{describe:'a list of files to do something with'})},(argv:Arguments)=>{console.info(argv)}).strictCommands().demandCommand(1).parse()
Note: If you use version tags in url then you also have to add
-deno
flag on the end, like@17.7.2-deno
As ofv16
,yargs
supports ESM imports:
importyargsfrom'yargs'import{hideBin}from'yargs/helpers'yargs(hideBin(process.argv)).command('curl <url>','fetch the contents of the URL',()=>{},(argv)=>{console.info(argv)}).demandCommand(1).parse()
See examples of using yargs in the browser indocs.
Having problems? want to contribute? join ourcommunity slack.
Libraries in this ecosystem make a best effort to trackNode.js' release schedule. Here'sapost on why we think this is important.
About
yargs the modern, pirate-themed successor to optimist.