yargs v17.2.1调用getHelp()报函数未定义 如何避免重复配置选项
问题原因
getHelp()是yargs实例的成员方法,不是yargs构造函数的静态方法,你之前直接调用yargs.getHelp()自然会抛出函数未定义的错误。- 你原来的代码直接将yargs实例链式调用到
.argv,没有保存配置完成的实例,所以后续无法复用配置调用getHelp()。
最优实现方案
不需要重复编写option配置,只要提前保存配置完成的yargs实例,后续解析参数、获取帮助文本都复用这个实例即可,可运行代码如下:
const yargs = require('yargs/yargs'); const { hideBin } = require('yargs/helpers'); async function parseArgs(){ // 保存配置完成的yargs实例,不要直接链式调用到.argv const yargsInstance = yargs(hideBin(process.argv)) .option("trend-file", { alias: "t", description: "The full filename of the trendfile.", type: "string", }) .option("start-time", { alias: "s", description: "Start time for trend.", type: "string", }); // 解析参数 const parsedArgs = await yargsInstance.argv; // 复用同一实例获取帮助文本,无需重复配置 const helpText = await yargsInstance.getHelp(); console.log(helpText); return parsedArgs; } parseArgs() .catch((e)=>{console.log(e.message);});
额外优化建议
如果参数配置项较多,可以把配置抽离为独立的对象,进一步提升可维护性:
// 抽离公共参数配置 const argOptions = { "trend-file": { alias: "t", description: "The full filename of the trendfile.", type: "string", }, "start-time": { alias: "s", description: "Start time for trend.", type: "string", } } async function parseArgs(){ const yargsInstance = yargs(hideBin(process.argv)).options(argOptions); const parsedArgs = await yargsInstance.argv; const helpText = await yargsInstance.getHelp(); console.log(helpText); return parsedArgs; }
内容的提问来源于stack exchange,提问作者habadeer
相关产品推荐
相关产品推荐

