You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					168 lines
				
				3.3 KiB
			
		
		
			
		
	
	
					168 lines
				
				3.3 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								# microcli  [](https://travis-ci.org/pawelgalazka/microcli) [](https://badge.fury.io/js/microcli)
							 | 
						||
| 
								 | 
							
								CLI scripts micro engine
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								const microcli = require('microcli')
							 | 
						||
| 
								 | 
							
								const cli = microcli(process.argv, 'Script doc');
							 | 
						||
| 
								 | 
							
								cli((options, p1, p2) => {
							 | 
						||
| 
								 | 
							
								    console.log('OPTIONS', options)
							 | 
						||
| 
								 | 
							
								    console.log('P1', p1)
							 | 
						||
| 
								 | 
							
								    console.log('P2', p2)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ script.js -a --foo=bar --boo abc def
							 | 
						||
| 
								 | 
							
								OPTIONS {a: true, foo: 'bar', boo: true }
							 | 
						||
| 
								 | 
							
								P1 abc
							 | 
						||
| 
								 | 
							
								P2 def
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$ script.js --help
							 | 
						||
| 
								 | 
							
								Usage: script.js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Script doc
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Annotations
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								const microcli = require('microcli')
							 | 
						||
| 
								 | 
							
								const cli = microcli(process.argv, {
							 | 
						||
| 
								 | 
							
								  description: 'Basic script description',
							 | 
						||
| 
								 | 
							
								  params: ['p1', 'p2'],
							 | 
						||
| 
								 | 
							
								  options: {
							 | 
						||
| 
								 | 
							
								    a: 'description for a option',
							 | 
						||
| 
								 | 
							
								    foo: 'description for foo option'
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  examples: 'some examples'
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								cli((options, p1, p2) => {
							 | 
						||
| 
								 | 
							
								    console.log('OPTIONS', options)
							 | 
						||
| 
								 | 
							
								    console.log('P1', p1)
							 | 
						||
| 
								 | 
							
								    console.log('P2', p2)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ script.js --help
							 | 
						||
| 
								 | 
							
								Usage: script.js [options] [p1 p2]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Basic script description
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Options:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -a         description for a option
							 | 
						||
| 
								 | 
							
								    --foo      description for foo option
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								Examples:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								some examples
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Annotations plays part also in validating process. So if
							 | 
						||
| 
								 | 
							
								option which does not exist in annotations is provided, `microcli` will
							 | 
						||
| 
								 | 
							
								throw an error:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ script.js --bar
							 | 
						||
| 
								 | 
							
								Illegal option: --bar
							 | 
						||
| 
								 | 
							
								Available options: -a --foo
							 | 
						||
| 
								 | 
							
								Type "script.js --help" for more information
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Also each annotation is optional and custom annotations like `examples`
							 | 
						||
| 
								 | 
							
								(basically other than description, params and options) will be treated
							 | 
						||
| 
								 | 
							
								in `--help` content as additional header with string value.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Commands
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ script.js status --foo abc 
							 | 
						||
| 
								 | 
							
								OPTIONS {foo: true}
							 | 
						||
| 
								 | 
							
								P abc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$ script.js branch --help
							 | 
						||
| 
								 | 
							
								Usage: branch [options] [p]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Basic script description
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$ script.js --foo abc
							 | 
						||
| 
								 | 
							
								OPTIONS {foo: true}
							 | 
						||
| 
								 | 
							
								P abc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								const microcli = require('microcli')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const main = microcli(process.argv, {
							 | 
						||
| 
								 | 
							
								  description: 'base command',
							 | 
						||
| 
								 | 
							
								  params: ['p'],
							 | 
						||
| 
								 | 
							
								  options: {
							 | 
						||
| 
								 | 
							
								    foo: 'foo option'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const status = microcli(process.argv.slice(1), {
							 | 
						||
| 
								 | 
							
								  description: 'Fake git status',
							 | 
						||
| 
								 | 
							
								  params: ['p'],
							 | 
						||
| 
								 | 
							
								  options: {
							 | 
						||
| 
								 | 
							
								    foo: 'foo option'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const branch = microcli(process.argv.slice(1), {
							 | 
						||
| 
								 | 
							
								  description: 'Fake git branch',
							 | 
						||
| 
								 | 
							
								  params: ['p'],
							 | 
						||
| 
								 | 
							
								  options: {
							 | 
						||
| 
								 | 
							
								    foo: 'foo option'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								switch (process.argv[2]) {
							 | 
						||
| 
								 | 
							
								  case 'status':
							 | 
						||
| 
								 | 
							
								    status((options, p) => {
							 | 
						||
| 
								 | 
							
								      console.log('OPTIONS', options)
							 | 
						||
| 
								 | 
							
								      console.log('P', p)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    break
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  case 'branch':
							 | 
						||
| 
								 | 
							
								    branch((options, p) => {
							 | 
						||
| 
								 | 
							
								      console.log('OPTIONS', options)
							 | 
						||
| 
								 | 
							
								      console.log('P', p)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    break
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  default:
							 | 
						||
| 
								 | 
							
								    main((options, p) => {
							 | 
						||
| 
								 | 
							
								      console.log('OPTIONS', options)
							 | 
						||
| 
								 | 
							
								      console.log('P', p)
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Custom --help
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can provide `help` function to `cli` call, which can generate
							 | 
						||
| 
								 | 
							
								custom help message, having annotations object:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								const microcli = require('microcli')
							 | 
						||
| 
								 | 
							
								const cli = microcli(process.argv, {
							 | 
						||
| 
								 | 
							
								  /* some annotations */
							 | 
						||
| 
								 | 
							
								}, (scriptName, annotations, logger) => {
							 | 
						||
| 
								 | 
							
								  logger.log('Custom --help message') 
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								cli((options, p1, p2) => {
							 | 
						||
| 
								 | 
							
								    console.log('OPTIONS', options)
							 | 
						||
| 
								 | 
							
								    console.log('P1', p1)
							 | 
						||
| 
								 | 
							
								    console.log('P2', p2)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								```
							 |