第三方包_nopt - dkvirus/npm-resource-read GitHub Wiki

说明

命令行选项解析器,见过最强大的解析器,没有之一。

什么是命令行?$ npm install nopt --save

  • 程序。其中第一个单词 npm 肯定是程序名称;
  • 命令install 是具体的命令,要做什么事儿,英文叫做 command
  • 参数nopt 是命令后面跟的参数;
  • 选项--save 这种由 - 或者 -- 开头的就叫做选项,辅助功能,如这里安装包是主要任务,将安装的包名记录在 package.json 中就是 --save 干的事了。

使用前先安装:$ npm install nopt

示例

example1:获取选项参数

// test1.js
var nopt = require("nopt")

// 具体的选项,后面跟值类型
var knownOpts = { 
    "save" : Boolean, 
    "file": [String],
    "number": [Number],
}

var parsed = nopt(knownOpt)
console.log(parsed)

在终端运行,加上参数。

$ node test1.js --save
{ "save": true }
$ node test1.js --no-save
{ "save": false }  // 虽然没定义 --no-save 选项,但定义了 save,这里自动取反
$ node test1.js --file "test1.js"
{ "file": "test1.js" }
$ node test1.js --number "12"
{ "number": 12 }   // 虽然穿的是字符串,但是设置了number只接收数值,这里自动转化

example2:选项参数简写

// test2.js
var nopt = require("nopt")

// 具体的选项,后面跟值类型
var knownOpts = { 
    "save" : Boolean, 
    "file": [String],
    "number": [Number],
}

// 简写,本来要写 --file,简写只要写 -f 即可
var shortHands = { 
    "n": ["--number"],
    "s": ["--save"],
    "f": ["--file"]
}

var parsed = nopt(knownOpts, shortHands)
console.log(parsed)

运行打印参数如下:

$ node test2.js -f "test2.js"
{ "file": "test2.js" }
$ node test2.js -sf "test2.js"
{ "save": true, "file": "test2.js" }   // 合并写法,tar -czvf "xxxx" 就是这么处理的

example3:获取命令参数

// test3.js
var nopt = require("nopt")

// 具体的选项,后面跟值类型
var knownOpts = { 
    "save" : Boolean, 
    "file": [String],
    "number": [Number],
}

// 简写,本来要写 --file,简写只要写 -f 即可
var shortHands = { 
    "n": ["--number"],
    "s": ["--save"],
    "f": ["--file"]
}

var parsed = nopt(knownOpt, shortHands)
console.log(parsed)

运行,最原始的命令行数据在 argv.original 中,去除选项后的数据在 argv.remain 中。

$ node test3.js install nopt --save
{
  "save": "true",
 { argv:
   { remain: [ 'install', 'nopt' ],
     cooked: [ 'install', 'nopt', "--save" ],
     original: [ 'install', 'nopt', "--save" ] } }
}