如何在一个grunt.registerTask中调用多个grunt.run.task?

时间:2014-07-28 12:44:33

标签: javascript mongodb elasticsearch gruntjs nodemon

当我在我的cmd shell中输入grunt时,我试图完成的是以下内容:

  • 启动mongod
  • 启动elasticsearch
  • 启动nodemon
  • 当mongod和elasticsearch运行时,执行load_JSON_into_elasticSearch.js(因为我需要连接到它们)
  • 完成所有操作后,在系统默认浏览器中打开http://localhost:8080

目前唯一有效的是,它将启动mongod,elasticsearch和nodemon。那就是......

Gruntfile.js

module.exports = function (grunt) {

grunt.initConfig({
    shell: {
        mongo: {
            command: 'mongod',
            options: {
                async: true
            }
        },
        elasticsearch: {
            command: 'elasticsearch',
            options: {
                async: true
            }
        }
    },
    nodemon: {
        dev: {
            script: 'server.js'
        }
    },
    execute: {
        target: {
            src: ['load_JSON_into_elasticSearch.js']
        }
    },
    open: {
        dev: {
            path: 'http://localhost:8080',
            app: 'Google Chrome'
        }
    }
});

grunt.loadNpmTasks('grunt-shell-spawn');
grunt.loadNpmTasks('grunt-nodemon');
grunt.loadNpmTasks('grunt-execute');
grunt.loadNpmTasks('grunt-open');

grunt.registerTask('startServices', ['shell', 'nodemon']);
grunt.registerTask('indexAndBrowser', ['execute', 'open']);

grunt.registerTask('default', 'Start it...', function() {

    var done = this.async();

    grunt.log.writeln('\n===========================================\nStarting Mongod/ ElasticSearch/ Nodemon...\n===========================================\n');

    var init = function () {
        grunt.task.run('startServices');

        var process = function () {
            setTimeout(function () {
                grunt.log.writeln('\n==================================\nStarting Index and Browser...\n==================================\n');
                grunt.task.run('execute');
            }, 20000);
        };

        process();
        done();
    };

    init();

});

};

1 个答案:

答案 0 :(得分:0)

我个人会建议使用grunt-run(我写它来管理类似的需求)。

https://www.npmjs.org/package/grunt-run

它有一些有用的功能,你可以利用。以下是使用grunt-run的示例:

grunt.initConfig({
  run: {
    elasticsearch: {
      cmd: 'elasticsearch',
      options: {
        wait: false,
        ready: /started/
      }
    },
    mongo: {
      command: 'mongod',
      options: {
        wait: false,
        ready: /waiting for connections on port/
      }
    },
    load_json_into_es: {
      args: [
        'load_JSON_into_elasticSearch.js'
      ]
    }
  },
  open: {
    dev: {
      path: 'http://localhost:8080',
      app: 'Google Chrome'
    }
  },
  nodemon: {
    dev: {
      script: 'server.js'
    }
  }
});

grunt.loadNpmTasks('grunt-run');
grunt.loadNpmTasks('grunt-nodemon');
grunt.loadNpmTasks('grunt-open');

grunt.registerTask('default', [
  'run:mongo'
  'run:elasticsearch'
  'run:load_json_into_es',
  'nodemon',
  'open'

]);
相关问题