| 用户的每一个输入,都会放置在program对应option长名的字段的驼峰形式上,如果没有提供长名,则放在短名字段上。上例中,如使用: testcommander -p 111 -P 222 -b 333则依次存储在program的peppers、pineapple和bbqSauce上。 同时,commander提供多种验证方式,如正则表达式: program.option('-s --size <size>', 'Pizza size', /^(large|medium|small)$/i, 'medium') 
 则指定只能输入特定的值。 同时,commander提供一个方案,允许用户设置子命令。commander称之为Git风格的子命令。 var program = require('commander');  program   .version('0.1.0')   .command('install [name]', 'install one or more packages')   .command('search [query]', 'search with optional query')   .command('list', 'list packages installed', {isDefault: true})   .parse(process.argv); 
 这个例子中,假设命令行名字为pm,则当用户输入pm-install、pm-search或pm-list时候,commander会尝试在入口文件的同一级目录找到install、search或list,并交给这个文件去执行。 2. 进度条 progress 在编写web程序时候,大家经常会展示一个进度条。用以缓解用户在等待时候的焦虑。其实在命令行程序中也会有这种交互方式。比如wget就会在下载过程中给出进度提示。 在NodeJS中也有这样的效果可以使用。这就是progress包。下面的代码,运行结果是下载CentOS安装盘。在下载之中,会实时打印进度: const ProgressBar = require("progress") const request = require("request") const progress = require("request-progress") const fs = require("fs")  const download = (url, headers, target, totalSize) => {     let percent = 0      const bar = new ProgressBar('下载中: ├:bar┤ 完成:percent 预估完成时间:eta秒 用时:elapseds', {         total: 100,         complete: "█",         incomplete: "─",         width: 60     })      let opt = {         headers,         url: url     }      return new Promise((resolve, reject) => {         progress(request.get(opt))             .on('progress', function (state) {                 let progressFix = ((state.percent) * 100).toFixed(2)                 delta = progressFix - percent                 bar.tick(delta)                 percent = progressFix             })             .on("error", () => {                 return reject()             })             .on('end', () => {                 bar.tick(100 - percent)                 console.log('n')                 return resolve(target)             })             .pipe(fs.createWriteStream(target));     }) }  const foo = {     getHeaders: () => {         const headers = {             'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',             'Accept-Charset': 'UTF-8,*;q=0.5',             'Accept-Encoding': 'gzip,deflate,sdch',             'Accept-Language': 'en-US,en;q=0.8',             'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0'         }          return Object.assign({}, headers)     },      download: function (url, target, totalSize){         let headers = this.getHeaders()         headers = Object.assign(headers)          download(url, headers, target, totalSize)     } }   foo.download("http://mirrors.cmich.edu/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso",     "CentOS-7-x86_64-DVD-1810.iso", 4508876.8     ) 
 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |