您的位置:首页 > Web前端 > Node.js

nodejs实现命令行工具(一)

2016-02-26 12:06 609 查看
要实现一个类似bower init的问答式命令行工具,要通过process来和命令行进行交互

通过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键的时候,下一次是否还有步骤,以进行继续下一步的输入或者是退出输入检测

在结束完输入之后,调用回调函数,将输入的数据输出处理

这里是等全部输入完成之后才对输入结果进行处理,而不是每次输入都进行相应的处理,减少阻塞时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: