在前端开发中,我们经常需要获取命令行参数来处理一些逻辑。而在 Node.js 环境下,可以使用 process.argv
来获取命令行参数。但是,这种方式获取的参数非常的原始,需要自己手动处理才能使用。
这时候,我们可以使用一个 npm 包——subarg,来解决这个问题。
subarg 是什么
subarg 是一个能够解析命令行参数的 npm 包,可以将参数解析为一个 JS 对象。它的特点是,能够处理特定情况下的参数解析,如:
- 自动转换数字和布尔值
- 支持选项参数
- 支持数组和对象参数的嵌套
- 支持下标和键盘的混合使用
- 等等
如何使用 subarg
首先,需要安装 subarg 包:
npm install subarg
然后,在代码中引入 subarg:
const subarg = require('subarg');
接着,我们可以使用 subarg()
方法来解析参数。以以下参数为例:
node index.js --name John -age 22 --blog.title hello --keys foo,bar,baz "some string"
我们可以这样来解析参数:
const args = subarg(process.argv.slice(2)); console.log(args);
输出的结果为:
-- -------------------- ---- ------- - ----- ------- ---- --- ----- - ------ ------- -- ----- ------- ------ ------- -- ------ -------- -
从结果可以看出,subarg 已将命令行参数解析成了一个 JS 对象,可以直接使用。
更多用法
数组参数
subarg 支持数组参数的解析。以以下参数为例:
node index.js --arr 1 2 3
我们可以这样来解析数组参数:
const args = subarg(process.argv.slice(2)); console.log(args.arr); // [1, 2, 3]
布尔参数
subarg 支持布尔参数的解析。以以下参数为例:
node index.js --flag
我们可以这样来解析布尔参数:
const args = subarg(process.argv.slice(2)); console.log(args.flag); // true
默认值
subarg 支持设置默认值。以以下参数为例:
node index.js
我们可以这样使用默认值:
const args = subarg(process.argv.slice(2), { name: 'default name' }); console.log(args.name); // 'default name'
指定选项
subarg 支持指定选项,只解析选中的选项。以以下参数为例:
node index.js --name John -a 22 --blog.title hello --keys foo,bar,baz "some string"
我们可以这样指定选项:
const args = subarg(process.argv.slice(2), { boolean: ['a'], alias: { n: 'name' } }); console.log(args);
输出的结果为:
{ name: 'John', a: true }
禁止选项
subarg 支持禁止选项,不解析选中的选项。以以下参数为例:
node index.js --name John -a 22 --blog.title hello --keys foo,bar,baz "some string"
我们可以这样禁止选项:
const args = subarg(process.argv.slice(2), { stopEarly: true }); console.log(args);
输出的结果为:
{ _: ['--name', 'John', '-a', '22', '--blog.title', 'hello', '--keys', 'foo,bar,baz', 'some string'] }
总结
使用 subarg,能够极大的提高命令行参数的解析效率,减少代码量。同时,subarg 支持多种常见的参数解析场景,使用方便,非常值得推荐和学习使用。
示例代码
-- -------------------- ---- ------- ----- ------ - ------------------ ----- ---- - ----------------------------- - -------- ------ ------ - -- ------ -- ---------- ---- --- ------------------
输出结果:
{ _: [ '--name', 'John', '-a', '22', '--blog.title', 'hello', '--keys', 'foo,bar,baz', 'some string' ] }
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/40408