code: function(file) {
      fis.log.debug('revert cache');
      if (
        exports.enable && fis.util.exists(this.cacheInfo) && fis.util.exists(this.cacheFile)
      ) {
        fis.log.debug('cache file exists');
        var infos = fis.util.readJSON(this.cacheInfo);
        fis.log.debug('cache info read');
        if (infos.version == this.version && infos.timestamp == this.timestamp) {
          var deps = infos['deps'];
          var allValid = Object.keys(deps).every(function(f) {
            var d = fis.util.mtime(f);
            return d != 0 && deps[f] == d.getTime()
          });
  
          if (!allValid) {
            fis.log.debug('cache is expired');
            return false;
          }
          this.deps = deps;
          this.mDeps = infos.mDeps;
          fis.log.debug('cache is valid');
          if (file) {
            file.info = infos.info;
            file.content = fis.util.fs.readFileSync(this.cacheFile);
          }
          fis.log.debug('revert cache finished');
          return true;
        }
      }
      fis.log.debug('cache is expired');
      return false;
    }
docs: 从缓存目录中读取缓存内容。
  @param  {Object} [file] 如果传入了此参数，从缓存文件中读取的内容将会赋值到 `file.content` 以及数据信息会被赋值到 `file.info`.
  @return {Boolean} 返回 true, 如果缓存有效，否则返回 false.