Получить 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);
})
;
});
}