在运行带节点的程序时检查是否给出了ARGV

13a*_*aal 5 javascript argv node.js

运行带节点的程序时:

node test.js
Run Code Online (Sandbox Code Playgroud)

你怎么检查程序是否ARGV在运行时给出node test.js --example?到目前为止我尝试的是以下内容:

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

if(process.argv[1] !== '')
{
    say('false');
}
else {
    say('success');
}
Run Code Online (Sandbox Code Playgroud)
if(process.argv[1] === null)
{
    say('false');
}
else {
    say('success');
}
Run Code Online (Sandbox Code Playgroud)

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

kev*_*net 6

  • argv [0]是节点inerpretor的名称 - >在一般节点中
  • argv [1]是脚本的路径.所以argv [1]总是被填满

试着这个非常清楚:

console.log(process.argv);
Run Code Online (Sandbox Code Playgroud)


13a*_*aal 6

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

if(process.argv[2] === undefined){
    say('false');
} else {
    say('true');
}
Run Code Online (Sandbox Code Playgroud)

以下是ARGV在 Node 中处理时发生的情况:

ARGV[0]

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

} else {
    console.log('Success');
    console.log(process.argv[0]);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Success
C:\Program Files\nodejs\node.exe //Path to node executable
Run Code Online (Sandbox Code Playgroud)

ARGV[1]

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

} else {
    console.log('Success');
    console.log(process.argv[1]);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Success
C:\Users\bin\javascript\node\test.js //Path to file
Run Code Online (Sandbox Code Playgroud)

ARGV[2]

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

} else {
    console.log('Success');
    console.log(process.argv[2]);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Success
--example //The actual flag that was given
Run Code Online (Sandbox Code Playgroud)

因此,因此要检查是否确实给出了标志,您可以查找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] ]
Run Code Online (Sandbox Code Playgroud)

因此,正如您所看到的,树的结构是一个数组,第一个参数是0.