解析节点命令行参数

Pab*_*ado 5 json command-line-arguments node.js

我正在学习如何使用 node.js,但在解析命令行参数时遇到问题。以下行:

node test.js --input=in.txt
Run Code Online (Sandbox Code Playgroud)

当代码到达这个命令时给出解析错误:

var fileName = JSONparse.(process.argv[2]);
Run Code Online (Sandbox Code Playgroud)

结果报错:

 undefined
--input=in.txt 

Syntax error: Unexpected number
Run Code Online (Sandbox Code Playgroud)

我想要做的是为输入文件创建一个可选变量。如果未在命令行中指定,则应解析为“a.txt”。

我还没有找到一种创建默认参数的简单方法,或者使用诸如 '--input=' 之类的标识符来不必担心传递参数的顺序(我知道在这种情况下使用一个参数并不重要) .

Jac*_*cob 0

最佳选择:使用现有的命令行解析器。yargs模块工作得很好。

如果你想自己动手,这是我会采取的方法。首先,使用所有默认值创建一个对象:

var opts = { 
  inputStream: process.stdin,
  verbose: false
};
Run Code Online (Sandbox Code Playgroud)

...然后只需循环遍历参数,随时替换选项。如果选项不存在,则将使用默认值:

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.
}
Run Code Online (Sandbox Code Playgroud)