使用grunt运行2个异步任务

时间:2013-02-08 05:54:39

标签: javascript node.js coffeescript gruntjs

我正在开发一个小型节点项目,我使用coffeescript而不是客户端代码。我正在尝试使用grunt设置我的开发环境。我已经实现了运行服务器的自定义grunt任务,如下所示:

start = require './start' #just a function to start express.js application
grunt.registerTask 'server', 'Starting server', ->
    grunt.log.write 'Preparing server to start'
    done = do @async
    start (err) ->
        grunt.log.write "server running at localhost:4000"

我还想使用grunt-contrib-watch插件运行“watch”任务:

grunt.initConfig
    watch:
        coffee:
            files: ['public/coffee/**/*.coffee']
            tasks: ['coffee']
        jade:
            files: ['public/jade/**/*.jade']
            tasks: ['jade']
        less:
            files: ['public/less/**/*.less']
            tasks: ['less']

问题是:如何使这两项任务(手表和服务器)同时运行?我希望服务器启动并运行,并且不希望每次更改某些客户端代码时重新加载它。提前致谢

3 个答案:

答案 0 :(得分:8)

您可以使用以下任意一个包同时运行两个或更多任务:

  1. grunt-parallel
  2. grunt-concurrent

答案 1 :(得分:5)

将它添加到您的监视任务中,并删除服务器任务中的done = do @async

tasks: ['server', 'coffee']

您希望在Grunt配置中指定一个选项,以使服务器任务成为长期运行的"或不。然后,只有在需要长时间运行时才能调用@async(没有监视任务)。

答案 2 :(得分:0)

我遇到了同样的问题,即无法通过繁琐的任务启动监视和连接服务器。

为了解决这个问题,我在我的Gruntfile中使用grunt-exec启动服务器作为后台进程

grunt connect:preview &末尾的与号(&)是启动服务器作为后台进程的原因。

,exec: {
  start_server: {
    command: 'grunt connect:preview &'
  }
}

然后像这样注册grunt任务

grunt.registerTask('preview', ['clean:preview', 'template', 'exec', 'watch' ]);

必须有更好的方法来做到这一点,但到目前为止,这是我能想到的最好的。