当 运行 有节点的程序时检查是否给出 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
。
当运行使用节点运行程序时:
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
。