Извлечение экспорта машинописного текста в файл json с использованием gulp
У меня есть несколько машинописных файлов, некоторые из них экспортируют определенную переменную с именем APIS, которая представляет собой массив объектов. Я хочу извлечь значения всех этих экспортов и передать их в файл json, используя gulp.
Например, у меня есть папка с именем services, с 3 файлами: service1.ts, service2.ts, service3.ts.
service1.ts:
...
export const APIS = [ { "field1" : "blabla" } ];
service2.ts:
...
export const APIS = [ { "field2" : "yadayada" }, { "field3" : "yadabla" } ];
service3.ts: - не экспортирует APIS var.
Я хочу использовать gulp в oder для создания файла json, который выглядит примерно так:
[ { "field1" : "blabla" }, { "field2" : "yadayada" }, { "field3" : "yadabla" } ]
gulpfile.js - это??? является заполнителем для отсутствующего кода.
gulp.task('default', function () {
return gulp.src('.../services/*.ts')
.pipe(???)
.pipe(concat('export.json'))
.pipe(gulp.dest('./test'));
});
Я новичок и в машинописи, и в глотке, так что я не уверен, как этого добиться... есть идеи?:)
РЕДАКТИРОВАТЬ: Итак, я понимаю, что для этого нет решения OOTB, и мне нужно написать свою собственную задачу / плагин. Я не совсем уверен, как этого добиться. В идеале, я хочу найти плагин gulp (или комбинацию плагинов), который может обрабатывать файлы ts / js как объекты со свойствами. Затем я могу извлечь нужную мне переменную из файла.
Я не мог найти что-то подобное, только плагины для работы со строками. Мне кажется, что обрабатывать мой файл ts как строку и использовать поиск с регулярным выражением слишком сложно. Есть что-то, чего я здесь не хватает? Есть ли более простой способ сделать это?
2 ответа
Это то, что я в итоге сделал, и это сработало для меня. Я помещаю это здесь в случае, если кто-то еще находит это полезным.:)
Вместо.ts я сохранил экспорт в файлы.js, а именно:
service2.export.js:
exports.APIS = [ { "field2" : "yadayada" }, { "field3" : "yadabla" } ];
Основываясь на ответе, приведенном здесь: /questions/29888937/dostup-k-znacheniyam-peremennyih-v-fajle-mashinopisi-s-pomoschyu-gulp/29888953#29888953 я создал задачу gulp следующим образом:
var gulp = require('gulp');
var concat = require('gulp-concat');
var map = require('gulp-map');
var fs = require('fs');
var allServices;
gulp.task('default', function() {
var allServices = [];
var stream = gulp.src('./**/*.export.js')
.pipe(map(function(file) {
var obj = require(file.path);
if (obj.APIS != null) {
allServices.push.apply(allServices, obj.APIS);
}
return file;
}));
stream.on("end", function (cb)
{
fs.writeFile('./export.json', JSON.stringify(allServices), cb);
});
return stream;
});
и теперь я получаю следующий вывод в export.json:
[ { "field1" : "blabla" }, { "field2" : "yadayada" }, { "field3" : "yadabla" } ]
это именно то, что я хотел.
Здесь уместен API компилятора машинописного текста, поскольку это то, что вам нужно для правильного анализа и понимания ts-кода. К сожалению, я не думаю, что есть плагин gulp, который реализует этот API.
Я думаю, что вам лучше всего полностью изменить стратегию и решить свою проблему другим способом или использовать регулярные выражения, чтобы попытаться извлечь нужные вам константы. Если вы не хотите написать свой собственный плагин gulp, используя API компилятора.