yargs.argv导致处理程序函数调用的原因


const yargs = require("yargs");
yargs.version = "1.0.0";
yargs.command({
command: "add",
describe: "do addition ",
handler: function () {
console.log("addition complete");
},
}).argv;

在上面使用yargs的代码中,我试图创建一个命令add,在使用node . add运行脚本时,将执行处理程序函数,并获得预期的输出

$节点。添加
添加完成

,但当在没有.argv的情况下运行相同的代码时,输出为空,并且不执行处理程序函数。在文档中,没有说明.argv是什么,它是对象还是函数,以及它的实际工作方式。乍一看,它看起来像是一个正常的方法调用,但

执行以下操作时
console.log(typeof yargs.argv);

输出为

$节点。添加
添加完成
对象

如果yargs.argv是一个类似于任何其他对象的对象,那么只需访问它就可以调用函数的方式和原因

有人能解释一下到底发生了什么吗?我错过了什么。

Yargs使用#getter,这允许javascript在调用属性时调用函数。

示例:

const obj = {
log: ['a', 'b', 'c'],
get latest() {
if (this.log.length === 0) {
return undefined;
}
return this.log[this.log.length - 1];
}
};
console.log(obj.latest);
// expected output: "c"

如果你查看源代码,你可以看到当你调用.argv时,yargs只调用.parse():

const yargs = new YargsInstance(processArgs, cwd, parentRequire, _shim);
// Legacy yargs.argv interface, it's recommended that you use .parse().
Object.defineProperty(yargs, 'argv', {
get: () => {
return yargs.parse();
},
enumerable: true,
});

最新更新