Grunt-contrib-watch目标和递归

时间:2013-12-30 14:35:57

标签: gruntjs grunt-contrib-watch

我试图想办法从块的其余部分中突破watch目标。目前我的观察目标如下:

watch: {
  options: {
    // Parent-level options
  },
  coffee: {
    // ...
  },
  stylus: {
    // ...
  },
  test: {
    options: {
      // Test-specific options
    },
    files: {
      // ...
    }
    tasks: {
      // ...
    }
  }
}

我面临的问题是我的测试选项包含与顶级不同的livereload端口,因此我可以使用grunt servergrunt test同时运行livereloadserver没有他们互相干扰。

在此之下,我有一个test别名和一个test别名。我正在寻找的是将watch监视目标分解为另一个任务,这样我就可以在我的服务器别名中运行watch-test以及类似{{1}}进行测试,以便进行测试服务器任务没有运行测试目标。

有什么想法吗?如果我遗漏了任何重要的内容或者这一点并不清楚,请告诉我。 谢谢!

2 个答案:

答案 0 :(得分:1)

我使用的解决方案是定义多个监视目标并重命名监视任务,如下所示:

watch: {
    scripts: {
        files: ['js/**/*.js'],
        tasks: ['concat', 'uglify'],
        options: {
            spawn: false
        }
    }
},

// Don't uglify in dev task
watchdev: {
    scripts: {
        files: ['js/**/*.js'],
        tasks: ['concat'],
        options: {
            spawn: false
        }
    }
}

grunt.loadNpmTasks('grunt-contrib-watch');
// Rename watch to watchdev and load it again
grunt.renameTask('watch', 'watchdev');
grunt.loadNpmTasks('grunt-contrib-watch');

grunt.registerTask('default', ['watch']);
grunt.registerTask('dev', ['watchdev']);

答案 1 :(得分:0)

由于grunt watch是一项多任务,因此从CLI运行grunt watch意味着要监视所有目标。您可以通过简单地运行grunt watch:testgrunt watch:server来运行一个目标,无论您喜欢什么。希望有所帮助。

编辑:在手表问题跟踪器上指出此问题可能是恰当的:

https://github.com/gruntjs/grunt-contrib-watch/issues/206

问题中的代码有点旧,我建议使用较新的代码来使用lodash并使用_代替grunt.util._(该实用程序现已弃用)。所以代码看起来像这样:

var _ = require('lodash');

module.exports = function(grunt) {
    // Run with: grunt switchwatch:target1:target2 to only watch those targets
    grunt.registerTask('switchwatch', function() {
        var targets = Array.prototype.slice.call(arguments, 0);
        Object.keys(grunt.config('watch')).filter(function(target) {
            return !(_.indexOf(targets, target) !== -1);
        }).forEach(function(target) {
            grunt.log.writeln('Ignoring ' + target + '...');
            grunt.config(['watch', target], {files: []});
        });
        grunt.task.run('watch');
    });
}

但是,您可以修改服务器任务以运行类似switchwatch:coffee:stylus:server的内容:

grunt.registerTask('server', [/* rest of your tasks */, 'switchwatch:coffee:stylus:server']);