You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中yargs触发addTask执行三次且if/else都运行如何解决

你遇到的addTask重复执行、if/else两个分支都触发的问题,核心原因出在yargs的调用配置上,和tasks.js里的业务逻辑无关,可按以下步骤排查解决:

  • 修正yargs解析触发方式
    你当前todo.js里的yargs链式调用末尾直接使用.argv触发参数解析,该属性每次被访问都会重新执行一次参数解析与命令匹配,若代码运行过程中该属性被多次访问,就会导致handler重复执行。你看到两个分支都被触发,是因为第一次handler执行时任务不存在,走if分支写入了任务,后续两次重复执行的handler检测到任务已存在就走else分支,属于重复执行后的正常表现。
    将末尾的.argv替换为显式的.parse()方法即可避免重复解析,建议同时补充字段类型声明、开启严格匹配模式,修改后的todo.js对应代码如下:
const tasks = require("./tasks");
const yargs = require('yargs');

yargs.command({
  command: "Add",
  builder: {
    task: {
      demandOption: true,
      type: 'string'
    },
    deadline: {
      demandOption: true,
      type: 'string'
    },
  },
  handler(argv) {
    tasks.addTask(argv.task, argv.deadline);
  },
})
.strict() // 开启严格模式,仅匹配明确定义的命令,避免模糊匹配触发异常
.parse();
  • 排查重复命令注册
    检查项目内是否有其他文件也注册了同名的Add命令且被导入到todo.js中,重复注册的相同命令会被同时触发执行。
  • 确认yargs版本稳定性
    若上述修改后问题仍存在,可检查当前使用的yargs是否为非正式测试版本,建议更换为稳定版,执行以下命令安装即可:
    npm install yargs@17.7.2

内容的提问来源于stack exchange,提问作者Dhanush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:18:01