当 运行 有节点的程序时检查是否给出 ARGV

Checking if ARGV is given when running a program with node

当运行使用节点运行程序时:

node test.js

当 运行 node test.js --example 时,如何检查程序是否被赋予了 ARGV?到目前为止我尝试过的是:

function say(input){
    console.log(input);
}

if(process.argv[1] !== '')
{
    say('false');
}
else {
    say('success');
}

if(process.argv[1] === null)
{
    say('false');
}
else {
    say('success');
}

但是第一个解决方案不会输出 else 而第二个解决方案只输出 NUL is not defined 因此,我在想我在编码时犯了一些错误?

  • argv[0] 是你的节点 inerpretor 的名称 --> 一般节点
  • argv[1] 是您脚本的路径。所以 argv[1] 总是被填充

试试这个以非常清楚:

console.log(process.argv);

另请参见极简主义者 here

var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);
console.log(argv.example);

感谢 kevin ternet 提供的答案,以及 maioman 提供的信息,我最终做的是:

if(process.argv[2] === undefined){
    say('false');
} else {
    say('true');
}

以下是您在节点中处理 ARGV 时发生的情况:

ARGV[0]:

if(process.argv[0] === undefined){
    console.log('Failure');
    console.log(process.argv[0]);

} else {
    console.log('Success');
    console.log(process.argv[0]);
}

输出:

Success
C:\Program Files\nodejs\node.exe //Path to node executable

ARGV[1]:

if(process.argv[1] === undefined){
    console.log('Failure');
    console.log(process.argv[1]);

} else {
    console.log('Success');
    console.log(process.argv[1]);
}

输出:

Success
C:\Users\bin\javascript\node\test.js //Path to file

ARGV[2]:

if(process.argv[2] === undefined){
    console.log('Failure');
    console.log(process.argv[1]);

} else {
    console.log('Success');
    console.log(process.argv[2]);
}

输出:

Success
--example //The actual flag that was given

因此,要检查是否实际给出了标志,您需要查找 ARGV[2]

这是整个 ARGV 树的示例 运行:

if(process.argv === undefined){
    console.log('Failure');
    console.log(process.argv);

} else {
    console.log('Success');
    console.log(process.argv);
}

Success
[ 'C:\Program Files\nodejs\node.exe' //ARGV[0],
  'C:\Users\bin\javascript\node\test.js' //ARGV[1],
  '--example' //ARGV[2] ]

正如您所见,树的结构是一个数组,第一个参数是 0