我试图想办法从块的其余部分中突破watch
目标。目前我的观察目标如下:
watch: {
options: {
// Parent-level options
},
coffee: {
// ...
},
stylus: {
// ...
},
test: {
options: {
// Test-specific options
},
files: {
// ...
}
tasks: {
// ...
}
}
}
我面临的问题是我的测试选项包含与顶级不同的livereload端口,因此我可以使用grunt server
和grunt test
同时运行livereload
和server
没有他们互相干扰。
在此之下,我有一个test
别名和一个test
别名。我正在寻找的是将watch
监视目标分解为另一个任务,这样我就可以在我的服务器别名中运行watch-test
以及类似{{1}}进行测试,以便进行测试服务器任务没有运行测试目标。
有什么想法吗?如果我遗漏了任何重要的内容或者这一点并不清楚,请告诉我。 谢谢!
答案 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:test
或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']);