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
相关产品推荐
相关产品推荐

