【问题标题】:How can I setup a grunt task to run my express server?如何设置 grunt 任务来运行我的快速服务器?
【发布时间】:2014-10-23 12:07:53
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: node.js selenium coffeescript gruntjs protractor


    【解决方案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
      });
    });
    

    使用异步

     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();
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2013-05-19
      相关资源
      最近更新 更多