| 
                         用户的每一个输入,都会放置在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 
 -     ) 
 
                          (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |