参数
arg 是一个无偏移的 CLI 参数解析器.
安装
npm install arg
使用量
arg() 需要1或2个参数:
- 命令行规格对象(见下文)
- 解析选项( E)可选,默认为
{permissive: false, argv: process.argv.slice(2), stopAtPositional: false}(中文(简体) )
它返回一个带有命令行上任何值的对象( 丢失选项因此是) ),从由此产生的对象中消失。 arg 不进行验证/要求检查 - 我们 由申请决定.
所有未被选项所消耗的参数(通称"外"参数)
添加到 result._,这是 永远 数组(即使没有通过额外参数,
返回空数组.
const arg = require('arg');
// `options` is an optional parameter
const args = arg(
spec,
(options = { permissive: false, argv: process.argv.slice(2) })
);
例如:
$ node ./hello.js --verbose -vvv --port=1234 -n 'My name' foo bar --tag qux --tag=qix -- --foobar
// hello.js
const arg = require('arg');
const args = arg({
// Types
'--help': Boolean,
'--version': Boolean,
'--verbose': arg.COUNT, // Counts the number of times --verbose is passed
'--port': Number, // --port <number> or --port=<number>
'--name': String, // --name <string> or --name=<string>
'--tag': [String], // --tag <string> or --tag=<string>
// Aliases
'-v': '--verbose',
'-n': '--name', // -n <string>; result is stored in --name
'--label': '--name' // --label <string> or --label=<string>;
// result is stored in --name
});
console.log(args);
/*
{
_: ["foo", "bar", "--foobar"],
'--port': 1234,
'--verbose': 4,
'--name': "My name",
'--tag': ["qux", "qix"]
}
*/
每个键的QQ值对的值要么是一个类型(函数或[函数]),要么是一个字符串(表示别名).
-
如果是函数,则将参数值的字符串值传递给它, 和返回值作为最终值.
-
对于数组,唯一的元素 必须 是一个类型函数。 矩阵类型表示 以及由此产生的返回中的价值 对象是一个数组,其中包含所有使用指定旗帜传递的值.
-
以弦为例,则起别名. 如果一面旗子被通过 匹配 键, (中文(简体) ), 接下来 价值 替换为它的位置.
类型函数通过三个参数:
- 参数值( 总是字符串)
- 参数名称( 如 .
--label(中文(简体) ) - 目的地的上一个值(可用于类似减少操作或支持
-v多次次数等)
这意味着内置 String, (中文(简体) ), Number,以及 Boolean 类型构造器“只是工作”作为类型函数.
请注意: Boolean 财务报告和审定财务报表 [Boolean] 有特殊待遇 - 一个选项论据是 没有 消费或通过,但相反 true 实值
已经返回。 这些选项被称为"旗".
对于希望表现为旗帜的自定义处理器,您可以将功能传递到 arg.flag()数字 :
const arg = require('arg');
const argv = [
'--foo',
'bar',
'-ff',
'baz',
'--foo',
'--foo',
'qux',
'-fff',
'qix'
];
function myHandler(value, argName, previousValue) {
/* `value` is always `true` */
return 'na ' + (previousValue || 'batman!');
}
const args = arg(
{
'--foo': arg.flag(myHandler),
'-f': '--foo'
},
{
argv
}
);
console.log(args);
/*
{
_: ['bar', 'baz', 'qux', 'qix'],
'--foo': 'na na na na na na na na batman!'
}
*/
还有, arg 提供名为“ 帮助” 的参数处理器 arg.COUNT,相当于 [Boolean] 参数的 .length
属性 - 在命令行上传递以密钥表示的布尔旗次数.
例如,这是你如何执行 ssh动词的多级( :-vvvv 成为最动词.
const arg = require('arg');
const argv = ['-AAAA', '-BBBB'];
const args = arg(
{
'-A': arg.COUNT,
'-B': [Boolean]
},
{
argv
}
);
console.log(args);
/*
{
_: [],
'-A': 4,
'-B': [true, true, true, true]
}
*/
选项
如果指定了第二个参数并且是一个对象,它会指定解析选项来修改 arg()。 。 。 .
argv
如果您已经切片或生成了一些要解析的原始参数( 而不是让 ) arg
切下来 process.argv您可以在 argv 选项.
例如:
const args = arg(
{
'--foo': String
},
{
argv: ['hello', '--foo', 'world']
}
);
结果是:
const args = {
_: ['hello'],
'--foo': 'world'
};
permissive
何时 permissive 设置为 true, (中文(简体) ), arg 将推动任何未知参数
到“ extra” 参数数组(result._)而不是抛出一个关于
不明旗帜.
例如:
const arg = require('arg');
const argv = [
'--foo',
'hello',
'--qux',
'qix',
'--bar',
'12345',
'hello again'
];
const args = arg(
{
'--foo': String,
'--bar': Number
},
{
argv,
permissive: true
}
);
结果是:
const args = {
_: ['--qux', 'qix', 'hello again'],
'--foo': 'hello',
'--bar': 12345
};
stopAtPositional
何时 stopAtPositional 设置为 true, (中文(简体) ), arg 将停止第一次解析
位置参数.
例如:
const arg = require('arg');
const argv = ['--foo', 'hello', '--bar'];
const args = arg(
{
'--foo': Boolean,
'--bar': Boolean
},
{
argv,
stopAtPositional: true
}
);
结果是:
const args = {
_: ['hello', '--bar'],
'--foo': true
};
错误
有些错误 arg 投掷提供 .code 属性,以帮助从用户错误中恢复,或
区分用户出错和开发者出错(bug).
(阿根廷语)
如果一个未知的选项( 未在 spec 对象中定义) 被通过, 则出现代码错误 ARG_UNKNOWN_OPTION 将扔出 :
// cli.js
try {
require('arg')({ '--hi': String });
} catch (err) {
if (err.code === 'ARG_UNKNOWN_OPTION') {
console.log(err.message);
} else {
throw err;
}
}
node cli.js --extraneous true
Unknown or unexpected option: --extraneous
财务问题
前所问之数相问答
我该怎么和他争吵 arg? 吗?
自己做断言,例如:
const args = arg({ '--name': String });
if (!args['--name']) throw new Error('missing required argument: --name');
许可证
释放 MIT 许可证。 。 。 .