我有一个名为test.js的文件,它有两个输入参数和一些困难的值,我想从另一个节点js文件调用这个文件,但我只想分配给第二个参数,而不是分配第一个参数。你知道怎么做吗?
test.js
const first= process.argv[2] || "one";
const second= process.argv[3] || "two";
console.log(first);
console.log(second);another.js
const child = require('child_process');
child.execFileSync('node', [
'test.js',
'second parameter'
],
{stdio: ['ignore', 1, 2]}
);当前结果:
$ node another.js
second parameter
two预期结果:
$ node another.js
one
second parameter发布于 2019-08-31 14:45:04
要实现此功能,您必须在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);发布于 2019-08-31 16:03:38
看起来你的第一个参数是可选的。将可选参数移到列表的末尾是一种很好的做法。因此,一个可能的解决方案是交换你们的论点。
解决这个问题的另一种方法是使用这样的命名参数:
node another.js --bar="second parameter" --foo="first parameter"发布于 2019-08-31 16:19:00
下面是如何做到这一点的。
a.js
const child = require('child_process');
child.execFileSync(
'node',
["test.js",'','2nd param'],
{ stdio: ['ignore',1,2] }
);test.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'作为第一个参数,这将无法通过测试。
https://stackoverflow.com/questions/57735752
复制相似问题