code: function (file) {
  
          var that = this;
          var error = false;
          var walk;
  
          if (file) {
  
  
              var fileList = typeof file === 'string' ? [file] : file;
  
              fileList = fileList.map(function (file) {
                  return path.resolve(that.base, file);
              });
  
              walk = function (list) {
  
                  list.forEach(function (file) {
  
                      if (error) {
                          return;
                      }
  
                      error = !that._compile(file);
  
                  });
              };
  
  
              walk(fileList);
  
              if (!error && this.options.combo) {
                  this._combo();
              }
  
          } else {
  
  
              walk = function (dir) {
  
                  if (dir === that.output) {
                      return;
                  }
  
                  var dirList = fs.readdirSync(dir);
  
                  dirList.forEach(function (item) {
  
                      if (error) {
                          return;
                      }
  
                      if (fs.statSync(path.join(dir, item)).isDirectory()) {
                          walk(path.join(dir, item));
                      } else if (that.filterBasename(item) && that.filterExtname(item)) {
                          error = !that._compile(path.join(dir, item));
                      }
  
                  });
              };
  
  
              walk(this.base);
  
              if (!error && this.options.combo) {
                  this._combo();
              }
          }
  
      }
docs: 编译模板
  @param   {String, ArrayList}    模板文件相对路径。无此参数则编译目录所有模板