用于获取命令行中的参数
/** * 获取命令行参数 * @param {Array} validOptions 有效参数的数组 * @returns {Object} 包含参数的对象 */ async function getCommandLineArgs(validOptions) { // 从命令行获取参数 const args = process.argv.slice(2); // 主机名是必填项 const host = args.shift(); if (!host) { throw new Error("必须提供主机名或 IP 地址或网段"); } const ipList = await getIpList(host); // 构建一个 map,方便查找命令行参数对应的选项 const cmdOptionMap = {}; for (const option of validOptions) { for (const cmd of option.cmd) { cmdOptionMap[cmd] = option; } } const param = {}; for (const arg of args) { const argi = arg.indexOf('='); var arg0 = arg; var arg1 = true; if (argi > 0) { arg0 = arg.substr(0, argi); arg1 = arg.substr(argi + 1); } if (!cmdOptionMap.hasOwnProperty(arg0)) { throw new Error(`您提供的参数 ${arg} 不存在`); } if (argi === -1 && cmdOptionMap[arg0].type !== 'bool') { throw new Error(`您提供的参数 ${arg} 需要带上参数值`); } param[arg0] = arg1; } const result = {}; result.ips = ipList; // 解析命令行参数 for (const option of validOptions) { // 查找匹配的参数定义 var value = option.value; for (const arg0 of option.cmd) { if (param.hasOwnProperty(arg0)) { value = param[arg0]; break; } } result[option.name] = getOptionValue(option, value); } return result; }
接下来看第五部分代码