Grunt 实例之让grunt 执行方法时能中断的函数
原文: http://www.jackness.org/2014/12/29/grunt-实例之-让grun...
时间: 2014-12-29
在接触Grunt 之后相信大家都会像我那样,迷恋在Grunt + nodejs 带来的全新的世界里,想实现这样那样的功能, 但是, 有没有发现:
通过grunt.registerTask 绑定的方法,貌似一执行就跑到方法的最后一行,中断都中断不了。
我们知道, nodejs 中readline 可以创建一个文本输入流,让我们通过此方法输入想设置的东东。
nodejs 中, 我们是这样写的:
var readline = require('readline'), rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('hey, what\'s your name?', function(answer) { console.log('原来你就是汪洋大盗' + answer + ' !'); rl.close(); });
demo 文件地址: http://www.jackness.org/lab/2014/grunt_async/rl_demo.js
打开终端(控制台) 输入node, 空格, 然后把demo中的js文件拖进终端里面, 然后enter回车。
node /Users/jackness/快盘/test/readline_test/demo.js
我们看到程序正常运行,能正常中断。
但是。 。 如果我们将代码放到Grunt 里面执行,情况就不一样了
在Gruntfile.js 中我们这样写
module.exports = function(grunt) { // 默认任务 grunt.registerTask('test', function(){ var readline = require('readline'), rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('hey, what\'s your name?', function(answer) { console.log('原来你就是汪洋大盗' + answer + ' !'); rl.close(); }); }); }
测试包地址: http://www.jackness.org/lab/2014/grunt_async/grunt_rl.zip
安装之后运行
grunt test
我们发现, 程序并没有让我们执行输入操作,只是单单输出了问题就结束了。
通过this.async() 方法令Grunt 任务同步执行
解决方法如下:
module.exports = function(grunt) { // 默认任务 grunt.registerTask('test', function(){ var readline = require('readline'), rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('hey, what\'s your name?', function(answer) { console.log('原来你就是汪洋大盗' + answer + ' !'); rl.close(); }); }); }
这样函数就能正常中断了