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

NestJS命令无法获取传递的options参数问题咨询

问题描述

按照nestjs-commander文档实现了如下命令:

import { Command, CommandRunner, Option } from 'nest-commander';

@Command({
  name: 'my-command',
})
export class MyCommand extends CommandRunner {
  async run(inputs: string[], options: Record<string, any>): Promise<void> {
    console.log(options); // 输出为空对象
  }

  @Option({
    flags: '-l, --limit <limit>',
    description: 'Limit option',
  })
  parseLimit(val: string) {
    return Number(val);
  }
}

main-cli.ts文件内容:

import { AppModule } from "./app.module";
import { CommandFactory } from "nest-commander";

async function bootstrap() {
  await CommandFactory.run(AppModule, ["log"]);
}

bootstrap();

已在package.json中添加脚本:

"console:dev": "ts-node -r tsconfig-paths/register src/main-cli.ts"

执行npm run console:dev my-command --limit=10时,命令可正常运行,但run方法中的options始终是空对象,无法获取limit参数值,请问原因是什么?

问题原因及解决方案

问题出在npm脚本的参数传递规则上:当使用npm run执行自定义脚本时,必须用--分隔npm自身的参数和要传递给目标脚本的参数。

你原命令里没有添加--,导致--limit=10被npm拦截,并没有传递给main-cli.ts,所以nest-commander无法识别到这个选项,最终options为空。

正确的执行命令应为:

npm run console:dev -- my-command --limit=10

添加--后,npm会将my-command和--limit=10完整传递给nest-commander处理,此时run方法就能正确获取到limit参数的值。

内容的提问来源于stack exchange,提问作者Mohammad Mehdi Habibi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:15:04