使用grunt-contrib-watch运行动态命名的grunt任务

时间:2014-04-24 16:13:11

标签: gruntjs grunt-contrib-watch

有没有办法根据更改的文件动态指定要运行的任务?

换句话说:

watch: {
  exec: {
    files: [html/*.html],
    tasks: ['exec:my_exec_task:THE_FILE_THAT_CHANGED']
  }
}

我可以观看观看事件,但我无法在回调中运行任务,因为它做错了#34;

grunt.event.on('watch', function(action, filepath, target) {
  if (target === 'exec') {
    grunt.task.run('exec:my_exec_task:' + filepath); /* this doesn't work */
    grunt.config('filepath', filepath); /* and neither does this, it's undefined in my exec task */
  }
});

至少文档说的是:https://github.com/gruntjs/grunt-contrib-watch#using-the-watch-event

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

根据文件

  

watch事件不是用于替换用于配置和运行任务的标准Grunt API。如果您尝试在观看活动中运行任务,那么您很可能做错了。请阅读配置任务。

您无法从事件中运行任务,但您可以在任务开始之前更改配置。添加以观看配置选项部分spawn: false

grunt.initConfig({
  watch: {
    scripts: {
      files: ['app/*.js'],
      tasks: ['jshint:one'],
      options: {
        spawn: false,
      },
    },
  },
  jshint: {
    one: {src: ""},
  },
});

并在观看事件更改配置"飞行"

grunt.event.on('watch', function(action, filepath) {
  grunt.config('jshint.one.src', filepath);
});

应用配置后,watch部分将运行任务jahint:one