0

我正试图找出一种方法来watch从街区的其余部分中分离出一个目标。目前我的监视目标如下所示:

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

我面临的问题是我的测试选项包括与顶级不同的 livereload 端口,因此我可以同时运行grunt servergrunt testwith livereloading 而不会让它们相互干扰。

在这之下,我有一个server别名和一个test别名。我正在寻找的是将test监视目标分解为另一个任务,这样我就可以简单地watch在我的服务器别名中运行,例如watch-test测试,这样服务器任务就不会运行测试目标。

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

4

2 回答 2

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']);
于 2014-02-13T03:27:03.370 回答
0

由于 grunt watch 是一个多任务,grunt watch从 CLI 运行意味着监视所有目标。您可以通过简单地运行grunt watch:testor来运行其中一个目标grunt 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']);
于 2013-12-30T17:42:05.393 回答