📜  如何解析 node.js 中的命令行参数?

📅  最后修改于: 2022-05-13 01:56:37.732000             🧑  作者: Mango

如何解析 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

输出:

使用 process.argv

示例 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文件:

输出:

程序根据通过 cmd 传递的参数执行算术运算。

方法 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}`);

要运行该文件,请执行以下命令:

输出:

使用 yargs 模块

笔记:

  • argv.$0 包含要执行的脚本文件的名称。
  • argv._ 是一个数组,其中包含未附加到选项(或标志)的每个元素,这些元素在 yargs 中称为命令。
  • argv.time、argv.b 等标志成为 argv 的属性。标志必须作为 –flag 传递。示例:节点 app.js –b