Grunt.js grunt-contrib-watch事件没有触发grunt.task.run

时间:2014-06-17 02:30:02

标签: javascript gruntjs grunt-contrib-watch

我有一个Grunt.js文件,该文件使用“grunt-contrib-watch”和“grunt-exec”,其原因是我希望以独特的方式使用把手预编译器的一些自定义功能。

代码:

module.exports = function(grunt) {

    grunt.initConfig({
        watch: {
            src: {
                files: ['**/*.hbs']
            }
        },
        exec: {
            preCompileTemplate: {
                cmd: function(inputFile) {

                    grunt.log.writeln('DERP DERP' + inputFile);

                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-exec');

    grunt.event.on('watch', function(action, filepath, target) {
        grunt.task.run('exec:preCompileTemplate:' + filepath);
        grunt.log.writeln('-------> ' + filepath);
        grunt.log.writeln('-------> ' + target);
    });

}

我在运行grunt watch然后更改.hbs文件时遇到的问题,2 grunt.log.writeln ------>回显到控制台。

问题是grunt.task.run似乎无法运行,因为其中始终显示DERP DERP DERP的控制台日志。

我无法在grunt-contrib-watcher中运行任务吗?我做错了吗?

2 个答案:

答案 0 :(得分:0)

我只是想在他们改变的时候上传一些文件,但是在你和miqid以及大量阅读shama的评论之间,我确实找到了办法。我认为它应该也是你想要的,

var watched_files = 'src/**/*';
var my_command = 'echo ';
module.exports = function(grunt) {
  grunt.initConfig({
    watch: {
      scripts: {
        files: watched_files,
        tasks: ['exec:whatever'],
        options: {
          spawn: false,
        },
      },
    },
    exec: {
      whatever: {
        cmd: function() {
          var fn = this.config.get('exec.current_file');
          return my_command + '"' + fn + '"';
        }
      },
    },
  });
  grunt.loadNpmTasks('grunt-exec');
  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.event.on('watch', function(action, filepath) {
    grunt.config('exec.current_file', filepath);
  });
};

现在,我对咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜通过grunt watch运行来改变文件的命令。

答案 1 :(得分:-1)

您需要在grunt.initConfig中配置您的任务。您可以在其官方网站上看到more

grunt.initConfig({
    jshint: {
      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
      options: {
        globals: {
          jQuery: true
        }
      }
    },
    watch: {
      files: ['<%= jshint.files %>'],
      tasks: ['jshint', 'yourAwasomeTask']
    }});