如何设置grunt任务来运行我的快速服务器?

时间:2014-08-29 13:08:19

标签: node.js selenium coffeescript gruntjs protractor

我不需要像grunt-express这样的东西,因为它似乎劫持了太多的选择并做出了太多的假设。我真正想做的就是能够从Grunt做coffee server.coffee并让它运行直到某个过程结束。有人能指出我能够做到这一点吗?

具体来说,我首先运行selenium,然后我需要运行我的服务器,然后我需要运行我的量角器测试,然后我需要结束selenium服务器,然后我需要结束我的服务器。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果你想要连续执行任务,可以使用nodejs child_process在grunt和async series中运行命令

例如(没有异步)

grunt.registerTask('doTask', 'do a single task', function() {
  var exec = require('child_process').exec;

  var runCmd = function(item, options, callback) {
        process.stdout.write('running "' + item + '"...\n');
        var cmd = exec(item, options);
        cmd.stdout.on('data', function(data) {
            grunt.log.writeln(data);
        });
        cmd.stderr.on('data', function(data) {
            grunt.log.errorlns(data);
        });
        cmd.on('exit', function(code) {
            if (code !== 0) throw new Error(item + ' failed');
            grunt.log.writeln('done\n');
            callback();
        });
   });

   runCmd('npm install', {cwd: '../server'}, function(err, results){
    // do sth
  });
});

使用async

 grunt.registerTask('doTasks', 'run tasks in series', function() {
    var async = require('async');
    var exec = require('child_process').exec;
    var done = this.async();
    //process.env.NODE_ENV = 'production';
    var runCmd = function(item, options, callback) {
        process.stdout.write('running "' + item + '"...\n');
        var cmd = exec(item, options);

        cmd.stdout.on('data', function(data) {
            grunt.log.writeln(data);
        });
        cmd.stderr.on('data', function(data) {
            grunt.log.errorlns(data);
        });
        cmd.on('exit', function(code) {
            if (code !== 0) throw new Error(item + ' failed');
            grunt.log.writeln('done\n');
            callback();
        });
    };
    async.series({
        "do task 1": function(callback) {
            runCmd('npm install', {
                cwd: ''
            }, callback);
        },
        "task 2": function(callback) {
            runCmd('grunt', {
                cwd: ''
            }, callback);
        },
        "task3": function(callback){
            runCmd('grunt', {
                cwd: ''
            }, callback);
        }
    }, function(err, results) {
        if (err) done(false);
        done();
    });
});