如何解析 node.js 中的命令行参数?
命令行参数是文本字符串,当应用程序通过操作系统的命令行界面 (CLI) 运行时,用于将附加信息传递给程序。在 Node.js 中,shell 接收到的所有命令行参数都在名为 argv(arguments-values) 的数组中提供给进程。
我们将使用两种方法通过process.argv数组以及流行的包yargs来解析命令行参数
方法一:使用process.argv:使用process.argv数组接收参数是最简单的方法。 Node.js 以process.argv的形式为每个正在运行的进程公开这个数组。 process.argv 数组的第一个元素是指向 Node 可执行文件的文件系统路径。第二个元素是正在执行的 JavaScript 文件的路径,其余数组元素是通过cmd传递的参数。
注意: process.argv数组的前两个元素始终存在,即使我们不传递任何参数。
示例 1:文件名:gfg.js
Javascript
for(let i = 0; i < process.argv.length; ++i) {
console.log(`index ${i} argument -> ${process.argv[i]}`);
}
Javascript
// To trim first 2 elements
const arg = process.argv.slice(2);
arg[1] = Number(arg[1]);
arg[2] = Number(arg[2]);
switch (arg[0]) {
case '+':
console.log(`Result of ${arg[1]}
+ ${arg[2]} = ${arg[1] + arg[2]}`);
break;
case '*':
console.log(`Result of ${arg[1]}
* ${arg[2]} = ${arg[1] * arg[2]}`);
break;
case '-':
console.log(`Result of ${arg[1]}
- ${arg[2]} = ${arg[1] - arg[2]}`);
break;
case '/':
if (arg[2] == 0) {
console.log(
'cannot be divided by zero!!');
} else {
console.log(`Result of ${arg[1]}
/ ${arg[2]} = ${arg[1] / arg[2]}`);
}
break;
case '%':
if (arg[2] == 0) {
console.log(
'cannot be divided by zero!!');
} else {
console.log(`Result of ${arg[1]}
% ${arg[2]} = ${arg[1] % arg[2]}`);
}
break;
default: console.log(
`operation cannot be performed!!`);
}
Javascript
const args = require('yargs').argv;
console.log(args);
console.log(`Language : ${args.language}`);
console.log(`IDE : ${args.ide}`);
通过传递参数,使用以下命令运行gfg.js文件:
node gfg.js I Love GeeksforGeeks
输出:
示例 2:根据通过cmd传递的参数执行算术运算的程序。
文件名:arthimatic.js
Javascript
// To trim first 2 elements
const arg = process.argv.slice(2);
arg[1] = Number(arg[1]);
arg[2] = Number(arg[2]);
switch (arg[0]) {
case '+':
console.log(`Result of ${arg[1]}
+ ${arg[2]} = ${arg[1] + arg[2]}`);
break;
case '*':
console.log(`Result of ${arg[1]}
* ${arg[2]} = ${arg[1] * arg[2]}`);
break;
case '-':
console.log(`Result of ${arg[1]}
- ${arg[2]} = ${arg[1] - arg[2]}`);
break;
case '/':
if (arg[2] == 0) {
console.log(
'cannot be divided by zero!!');
} else {
console.log(`Result of ${arg[1]}
/ ${arg[2]} = ${arg[1] / arg[2]}`);
}
break;
case '%':
if (arg[2] == 0) {
console.log(
'cannot be divided by zero!!');
} else {
console.log(`Result of ${arg[1]}
% ${arg[2]} = ${arg[1] % arg[2]}`);
}
break;
default: console.log(
`operation cannot be performed!!`);
}
通过传递以下参数运行arthimatic.js文件:
输出:
方法 2:使用 yargs 模块:当我们开始使用标志或您的服务器需要大量参数时,通过cmd传递参数变得乏味。
app -h host -p port -r -v -b --quiet -x -o outfile
为了解决这个问题,我们可以使用第三个库模块,例如 yargs 来解析通过cmd传递的参数。在这个模块中,您可以将参数作为键值对传递,然后在键的帮助下访问它们。 .argv将参数作为普通的旧对象获取。
使用以下命令安装yargs模块:
npm install yargs --save
示例:文件名:yarg.js
Javascript
const args = require('yargs').argv;
console.log(args);
console.log(`Language : ${args.language}`);
console.log(`IDE : ${args.ide}`);
要运行该文件,请执行以下命令:
node yarg.js –language=javascript –ide=GFG_IDE command1 command2 –b –v
输出:
笔记:
- argv.$0 包含要执行的脚本文件的名称。
- argv._ 是一个数组,其中包含未附加到选项(或标志)的每个元素,这些元素在 yargs 中称为命令。
- argv.time、argv.b 等标志成为 argv 的属性。标志必须作为 –flag 传递。示例:节点 app.js –b