使用grunt观察并重新编译单个模板

时间:2013-08-12 19:50:10

标签: javascript node.js gruntjs

我有一个目录,其中包含一堆jade templates和一个grunt任务,可以将所有这些目录编译为单独的html文件。

我希望有一个watch task在模板发生变化时重新编译模板,但是现在我的任务会在任何模板发生变化时重新编译每个模板。

Here is a demo在要点中。

是否有一种简洁的方法来编写一个在模板更改时重新编译模板的任务,而不是所有其他模板?

1 个答案:

答案 0 :(得分:0)

解决方案是在文件列表中添加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');
};