3 回答
TA贡献1835条经验 获得超7个赞
要实现此功能,您必须在test.js. 你可以这样做: -
//initialize with default values
let first = 'one', second = 'two';
if (process.argv[3]) { // if has 2nd argument
first = process.argv[2];
second = process.argv[3];
}
else { // else we assign second to 1st argument
second = process.argv[2];
}
console.log(first);
console.log(second);
TA贡献1812条经验 获得超5个赞
这是如何做到的。
js
const child = require('child_process');
child.execFileSync(
'node',
["test.js",'','2nd param'],
{ stdio: ['ignore',1,2] }
);
测试.js
const first= process.argv[2] || "one";
const second= process.argv[3] || "two";
console.log(first);
console.log(second);
node --version
v12.2.0
node a.js
one
2nd param
这会为第一个参数分配一个空字符串并通过您的测试。
它通过了您的测试,因为process.argv[2]它将是空字符串'',即falsey,并被默认值替换"one"
更换空白的第一参数''与null,undefined或使用,,实际发送的字符串'null'或'undefined'作为第一个参数,这将无法通过测试。
TA贡献1780条经验 获得超4个赞
看起来您的第一个参数是可选的。将可选参数移到列表末尾是一种很好的做法。因此,可能的解决方案之一是交换您的论点。
解决这个问题的另一种方法是使用像这样的命名参数:
node another.js --bar="second parameter" --foo="first parameter"
添加回答
举报