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