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

Watch and recompile individual templates with grunt

本文关键字:编译 单个模 新编译 grunt 观察 使用      更新时间:2023-09-26

我有一个目录,里面有一堆jade模板,还有一个将所有模板编译为单个html文件的grunt任务。

我希望有一个监视任务,当模板发生变化时重新编译它,但现在我的任务会在其中任何一个发生变化时,重新编译每个模板。

这是一个要点演示。

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

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