code: function gulpPrefixer() {
      // 创建一个让每个文件通过的 stream 通道
      var stream = through.obj(function (file, enc, callback) {
          var self = this;
  
          if (file.isNull()) {
              return callback(null, file);
          }
  
          if (file.isStream()) {
              return callback(createError(file, 'Streaming not supported'));
          }
  
          if (file.isBuffer()) {
              tinypng(file, function (data) {
                  let tinyFile = file.clone();
  
                  if (data) {
                      tinyFile.contents = data;
                  }
                  return callback(null, tinyFile);
              });
          }
      });
  
      stream.on('error', function (err) {
          log(': error ', gutil.colors.red(err));
      })
          .on('end', function () {
              var str = '',
                  total = 0, orginTotal = 0,
                  ratio;
  
              compressInfos.forEach(function(e) {
                  total += e.size;
                  orginTotal += e.originSize;
              });
  
              ratio = ( parseFloat(total/orginTotal, 10).toFixed(4) * 100 || 0) + '%';
  
              str += ': ' + gutil.colors.blue('[compress completed] ');
              str += 'skiped: ' + gutil.colors.red(skipImgs.length) + ' imgs, ';
              str += 'compressed: ' + gutil.colors.green(compressInfos.length) + ' imgs, ';
              str += 'totalSize: ' + gutil.colors.green(ratio);
              log(str);
          });
  
      return stream;
  }
docs: 插件级别函数 (处理文件)