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

如何在Commander.js的CLI命令Action中访问选项变量?

解决方案

在Commander.js中,要在命令的action函数里访问全局定义的选项(也就是你在program上设置的--something),有两种直接可行的方式:

方法1:通过program.opts()获取全局选项

program.opts()会返回所有全局选项的键值对,你可以直接通过选项的长名称(比如something,对应你的--something)来判断是否启用:

program
  .version(version)
  .name(name)
  .option('-sm, --something', 'does something', false)
  .description(description);

program.command('clear-environment').action(() => {
  // 获取全局选项
  const globalOptions = program.opts();
  
  // 检查--something是否被传入
  if (globalOptions.something) {
    // 这里执行你的操作
    console.log('执行something对应的操作');
  }

  (async () => {
    const userFeedback = await getPromptAnswers(CLEAR_ENV_QUESTIONS);
    if (userFeedback?.deleteAll) {
      cleanEnvirorment();
    }
  })();
});

方法2:通过action的command参数获取

action函数的第二个参数是当前命令的对象,通过它的parent属性可以访问主程序的选项:

program.command('clear-environment').action((_, command) => {
  // 从命令的父程序(主program)获取全局选项
  const globalOptions = command.parent?.opts();
  
  if (globalOptions?.something) {
    // 执行操作
  }

  // 你的异步代码...
});

关键注意点

  • 不要用短名称(-sm)访问选项,Commander.js会自动将选项解析为长名称对应的属性(比如--something对应something键)
  • 如果你是给clear-environment命令单独定义的选项,可直接在action的第一个参数里获取;但你这里是全局选项,所以需要从主程序或command.parent获取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:52:10