获取through2流的JSON / String?

时间:2015-11-30 07:56:27

标签: node.js gulp through2

我有一堆zip文件,每个文件都包含一个.config文件。

我想迭代每个zip,解压缩,读取配置文件,然后使用该配置文件将zip文件上传到某处。

gulp.task('deploy-zips', function () {
  const filter = config()[target].filter;

  return gulp.src([destination + '/' + filter])
    .pipe(deployZips());
});

这是任务切入点。

function deployZips() {
  return through({ objectMode: true }, function (zipFile, zipEncoding, zipCallback) {
    gutil.log(zipFile.path.split('\\').reverse()[0]);

    gulp.src(zipFile.path)
      .pipe(unzip({
        filter : function(entry){

          if (entry.type !== 'File') {
            return false;
          }

          return entry.path.indexOf('deploy-config.json') > -1;
        }
      }))
      .pipe(through({ objectMode: true }, function(configFile, configEncoding, uploadCallback){
          gutil.log(configFile.path); // Outputs the file name as deploy-config.json

          //????
          var config = JSON.parse(configFile);

          uploadCallback(null, configFile);
      }))
      .on('end', function() {
          zipCallback(null, zipCallback);
      })
      ;
  });

}

这似乎显示了我之后的所有zip文件,然后输出我想要查看的配置文件。但是在这一点上,我对如何解析配置文件以获取配置感到困惑。

我尝试解析configFile,使用fs.readFileSync(...)

读取文件

但似乎没有任何效果。配置包含要上传的凭据,因此我需要读取它,然后使用它将其发送到S3或配置的位置。

1 个答案:

答案 0 :(得分:4)

configFile更改为configFile.contents

  

var config = JSON.parse(configFile.contents);

请参阅https://github.com/gulpjs/vinyl#file

function deployZips() {
  return through({ objectMode: true }, function (zipFile, zipEncoding, zipCallback) {
    gutil.log(zipFile.path.split('\\').reverse()[0]);

    gulp.src(zipFile.path)
      .pipe(unzip({
        filter : function(entry){

          if (entry.type !== 'File') {
            return false;
          }

          return entry.path.indexOf('deploy-config.json') > -1;
        }
      }))
      .pipe(through({ objectMode: true }, function(configFile, configEncoding, uploadCallback){
          gutil.log(configFile.path); // Outputs the file name as deploy-config.json

          var config = JSON.parse(configFile.contents);

          uploadCallback(null, configFile);
      }))
      .on('end', function() {
          zipCallback(null, zipCallback);
      })
      ;
  });

}