微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 yargs.argv 导致处理函数调用

如何解决为什么 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"

如果您查看 source code,您可以看到当您调用 .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,});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。