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

