@chewbank/argv-router

简单的node.js命令行参数路由分发器

Usage no npm install needed!

<script type="module">
  import chewbankArgvRouter from 'https://cdn.skypack.dev/@chewbank/argv-router';
</script>

README

Install

npm install argv-router

匹配表达式

匹配表达式分为单参数和组合参数两种,不可混合使用

单参数

单参数时直接指定参数名即可,使用简写、全称命名时用英文逗号分隔

const argvRouter = require('argv-router')

argvRouter({
   '-v, --version'(argv) {
      console.log(argv)
   },
   '-w, --watch, <>'(argv) {
      console.log(argv)
   }
})

组合参数

组合参数时,多个参数使用空格分隔

const argvRouter = require('argv-router')

argvRouter({
   '-a -w'(argv) {
      console.log(argv)
   },
})

自动扩展

在使用组合参数时可以搭配单参数实现自动扩展,使用单参数中的任意简写或全称命名。如以下示例中组合参数“-a -w”会尝试匹配“-a -w”、“-a --watch”、“--async -w”、“--async --watch”。

let options = {
   '-w, --watch'(argv) {

   },
   '-a, --async'(argv) {

   },
   '-a -w'(argv) {

   }
}

argvRouter(options)

参数值匹配

通过“<>”占位符号定义是否匹配参数值

const argvRouter = require('argv-router')

argvRouter({
   '-a <> -w <>'(argv) {
      console.log(argv)
   },
})

快速赋值

通过“[$name]”定义是否启用无参数名的快捷赋值选项,在argv中返回一个以“$name”命名的匹配项数组

const argvRouter = require('argv-router')

argvRouter({
   '[files] -a <> -w <>'(argv) {
      console.log(argv.files)
   },
})

匹配优先级

首先按匹配参数数量进行升级,匹配参数越多优先级越高。在等量参数数量下,包含快速赋值的匹配项先级高于其它选项。

默认匹配

在参数为空时指定默认行为

let options = {
   '-w, --watch'(argv) {

   },
   '-a, --async'(argv) {

   }
}

let router = argvRouter(options, '-w')

动态执行

在js中动态执行指定的cli命令

let router = argvRouter(options)

router.execute('-v')

router.execute('-w -a')

注意事项

参数名必须使用“--”或“-”,否则视为语法错误。