我有一个包含一堆玉模板的目录,以及一个将所有模板编译成单独的 html 文件的繁重任务。
我想要一个监视任务,在模板更改时重新编译模板,但现在我的任务会在模板更改时重新编译每个模板。
是否有一种简洁的方法来编写一个在模板更改时重新编译模板的任务,但不是所有其他模板?
解决方案是在文件列表中添加一个filter
函数:
var fs = require('fs');
var join = require('path').join;
module.exports = function(grunt) {
grunt.initConfig({
jade: {
files: {
src: ['*.jade'],
dest: './',
expand: true,
ext: '.html',
filter: function(destDir, src) {
var dest = join(destDir, src.replace(/jade$/, 'html'));
var destMod;
try {
destMod = +fs.lstatSync(dest).mtime;
} catch (e) {
if (e.code === 'ENOENT') {
// there's no html file, so ensure that the
// jade file is compiled by returning true
return true;
}
throw e;
}
return fs.lstatSync(src).mtime > destMod;
}
}
},
watch: {
files: ['*.jade'],
tasks: ['jade']
}
});
grunt.loadNpmTasks('grunt-contrib-jade');
grunt.loadNpmTasks('grunt-contrib-watch');
};