2014-07-22 46 views
3

我想在我的Gruntfile.js中定义一个shell命令树,使用grunt-exec编写shell命令。如何注册多个grunt-exec任务?

我可以为单个命令执行此操作,但我无法弄清写入多组命令的语法,并且可以逐个或按组地调用它们。

请问有人可以提供一个完整的例子Gruntfile.js与以下任务结构?

test: `npm test` 
lint: 
    jshint: `jshint .` 
    csslint: `csslint .` 

我从make世界的到来,所以我真的希望这个工作流程推到我的Node.js的项目,该死的节点社区公约。

我想grunt默认为npm test

我想grunt lint同时执行jshint .csslint .

我想grunt jshint仅执行jshint .

回答

5

咕噜多任务支持多个目标,但它们不能嵌套。但是你可以注册执行其他任务的任务。

Gruntfile.js:

module.exports = function(grunt) { 
    grunt.initConfig({ 
     exec: { 
      test: "npm test", 
      jshint: "jshint .", 
      csslint: "csslint ." 
     } 
    }); 

    grunt.loadNpmTasks("grunt-exec"); 

    grunt.registerTask("default", ["exec:test"]); 
    grunt.registerTask("test", ["exec:test"]); 
    grunt.registerTask("lint", ["exec:jshint", "exec:csslint"]); 
}; 

注意,已经有很多可用的咕噜任务,如grunt-contrib-jshint,这使事情变得更简单。

+0

诀窍是列出每个子任务(grunt/grunt-exec似乎不允许写入它们嵌套)。然后将它们重新注册到层次结构中。 – mcandre

1

咕噜让你注册的名字任务,并且任务任务。通过字符串字面任务名称的阵列很容易做到,例如:

grunt.registerTask('default', ['test']); 
grunt.registerTask('lint', ['jshint', 'csslint']); 

jshint如果你将它定义为jshintgrunt.initConfig里面应该已经被注册。请记住,对于节点程序而言,一切都非常同步。任务将按照您提供的顺序运行。

编辑:如果您稍后需要它,您还可以registerTask函数而不是任务名称数组。这就是你如何编写一个可以执行异步工作的任务,或者你有非常严格的可能使用控制流逻辑的排序要求。尽可能坚持只根据任务名称进行注册。