解析Node命令行参数

5

我正在学习如何使用node.js,但在解析命令行参数时遇到了困难。以下是代码:

node test.js --input=in.txt

当代码执行到这个命令时,会出现解析错误:
var fileName = JSONparse.(process.argv[2]);

导致错误的结果:

 undefined
--input=in.txt 

Syntax error: Unexpected number

我正在尝试创建一个可选的变量用来输入文件。如果在命令行中未指定,则应将其解析为“a.txt”。
我还没有找到一种简单的方法来创建默认参数,或者使用标识符例如'--input =',以免担心传递参数的顺序(我知道在这种情况下只有一个参数无关紧要)。

1
顺便提一下,“语法错误”是因为JS语法有问题。没有JSONparse,即使有,JSONparse.(也没有意义;.用于访问成员,所以在.后需要一个标识符;(不起作用。也许你的意思是JSON.parse(process.argv[2]),但这也没有意义,因为该字符串不是JSON。 - Jacob
你是对的 @Jacob,我确实是指JSON.parse。然而:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse - Pablo Prado
3个回答

1

如果你想解析某些东西,它应该是一个字符串化的JSON对象或者解析结果出现错误。 重要的是要知道,在Node.js中,所有的命令行参数都是字符串。

let fileName = 'a.txt'

process.argv.slice(2).forEach((arg) => {
  if(arg.indexOf('--input') !== -1){
    if(arg.indexOf('=') !== -1){
      fileName = arg.split("=")[1].trim()
    } else {
      console.log('Error in providing command line argument')
    }
  }
})

console.log("File Name is ",fileName)

对于node index,输出结果为

文件名为a.txt

对于node index --input=hello.txt,输出结果为

文件名为hello.txt


1

Vorpal.js 是我为在 Node 中构建交互式 CLI 而制作的框架。作为其中的一部分,它具有内置的 API 以便于命令解析。


0
最佳选择:使用现有的命令行解析器。yargs 模块非常好用。
如果你想自己动手实现,这是我会采取的方法。首先,创建一个包含所有默认值的对象:
var opts = { 
  inputStream: process.stdin,
  verbose: false
};

...然后只需循环遍历args,一边进行替换一边进行。如果某个选项不存在,则将使用默认值:

for (var i = 2; i < process.argv.length; i++) {
  var arg = process.argv[i];
  var keyValue = arg.split('=');  
  var key = keyValue[0], value = keyValue[1];
  if (key === '--input' || key === '-i') {
      opts.inputStream = fs.createReadStream(value);
  }
  if (key === '---verbose' || key === '-v')  {
      opts.verbose = true;
  }
  // etc.
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接