Получить JSON/ строку потока 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 ответ

Решение

+ Изменить configFile в configFile.contents

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

Смотрите https://github.com/gulpjs/vinyl

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);
      })
      ;
  });

}
Другие вопросы по тегам