nodejs实现命令行工具(一)
2016-02-26 12:06
609 查看
要实现一个类似bower init的问答式命令行工具,要通过process来和命令行进行交互
通过process.stdout的输出流来对输出进行控制
通过process.stdin的输入流来对输入进行控制
需要使用process.stdin.resume();重置输入流,来打开输入流
然后通过process.stdin.on("data",function(chunk){});//对输入流进行监听,每个chunk代表一段输入流,即在输入之后按下enter键表示一段chunk
如果需要终止输入可以使用process.stdin.pause();
下面的一段代码中我们通过对输入流进行引导性的处理来实现bower init的效果
在结束完输入之后,调用回调函数,将输入的数据输出处理
这里是等全部输入完成之后才对输入结果进行处理,而不是每次输入都进行相应的处理,减少阻塞时间
通过process.stdout的输出流来对输出进行控制
process.stdout.write(); 将内容输出到命令行上面
通过process.stdin的输入流来对输入进行控制
需要使用process.stdin.resume();重置输入流,来打开输入流
然后通过process.stdin.on("data",function(chunk){});//对输入流进行监听,每个chunk代表一段输入流,即在输入之后按下enter键表示一段chunk
如果需要终止输入可以使用process.stdin.pause();
下面的一段代码中我们通过对输入流进行引导性的处理来实现bower init的效果
//步骤处理 var initjson = require('../lib/init'); var len = initjson.length, i = 1, inputArr = []; // gets 函数的简单实现 function gets(cb){ process.stdout.write(initjson[0].description); process.stdin.resume(); process.stdin.setEncoding('utf8'); process.stdin.on('data', function(chunk) { var inputJson = { title: initjson[i-1].title, data: chunk}; inputArr.push(inputJson); if((len--)>1){ process.stdout.write(initjson[i++].description); }else{ process.stdin.pause(); cb(inputArr); } }); } gets(function(reuslt){ console.log(reuslt); });init.js是一段步骤的数组对象
module.exports = [ { title: 'projectName', description: 'project name(ucweb-back):', defaults: 'ucweb-back' }, { title: 'test2', description: 'input something here(test2):', defaults: 'test2' }, { title: 'test3', description: 'input something here(test3):', defaults: 'test3' } ];通过判断每次输入enter键的时候,下一次是否还有步骤,以进行继续下一步的输入或者是退出输入检测
在结束完输入之后,调用回调函数,将输入的数据输出处理
这里是等全部输入完成之后才对输入结果进行处理,而不是每次输入都进行相应的处理,减少阻塞时间
相关文章推荐
- 理解inode
- Node.js 初识
- NodeJS写日志_Log4js使用详解
- ASP.NET 开发人员不必担心 Node 的五大理由
- Node.js的net模块
- nodeJS一些事儿
- node开发
- lintcode: Remove Nth Node From End of List
- lintcode:Remove Node in Binary Search Tree
- 学习node.js之stream
- nodejs npm常用命令
- HtmlAgilityPack 之 HtmlNode类
- [Lintcode]Remove Nth Node From End of List
- nw.js node-webkit系列(8)Native UI API MenuItem的使用
- 【转】 HTMLCollection和NodeList的区别
- nw.js node-webkit系列(7)Native UI API Menu的使用
- node 路由
- hadoop中namenode中的edit.log文件查看
- lintcode-easy-Insert Node in a Binary Search Tree
- ubuntu安装nodejs+pomelo+webstrom