2016-04-25 4 views
0

У меня есть несколько файлов машинописных файлов, некоторые из которых экспортируют определенный var-named APIS, который представляет собой массив объектов. Я хочу извлечь значения всех этих экспонатов и передать их в json-файл с помощью gulp.Извлечение экспорта машинописных файлов в 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 вар.

Я хочу использовать глоток в Одере создать файл 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')); 
}); 

Я новичок в обоих машинопись & глотком, так что я не знаю, как этого добиться ... какие-нибудь идеи? :)

EDIT: Итак, я понимаю, что для этого нет решения OOTB, и мне нужно написать собственную задачу/плагин. Я не уверен, как это достичь. В идеале я хочу найти плагин gulp (или комбинацию плагинов), который может обрабатывать файлы ts/js как объекты со свойствами. Затем я могу извлечь var, который мне нужен из файла.

Я не мог найти что-то в этом роде, только плагины для манипуляций с строкой - обработка моего ts-файла в виде строки и использование поиска с регулярным выражением кажутся мне слишком сложными. Здесь что-то не хватает? есть ли более прямой способ сделать это?

+0

Из любопытства, почему вы хотите скомпилировать машинописные тексты в js и поместить их в json-файл? – Grant

+0

Я этого не делаю. Я просто хочу создать json-файл из VAR APIS. – Ayelet

+1

Хорошо, вам понадобится плагин gulp, который может выполнять поиск через ваши ts-файлы и извлекать APIS-const, однако я не могу придумать плагин с верхней части головы, который вы могли бы использовать для этого, вам может понадобиться чтобы сделать свой собственный, если вам определенно нужно это сделать, чтобы решить ваши текущие потребности. – Grant

ответ

0

Это то, что я закончил, и это сработало для меня. Я предлагаю его здесь, если кто-то найдет это полезным. :)

Вместо .ts, я сохранил экспорт в .js файлов, а именно:

service2.export.js:

exports.APIS = [ { "field2" : "yadayada" }, { "field3" : "yadabla" } ]; 

Исходя из ответа, данного здесь: https://stackoverflow.com/a/36869651/3007732 я создал Задача 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; 
}); 

и теперь я получаю следующий вывод на экспорт.json:

[ { "field1" : "blabla" }, { "field2" : "yadayada" }, { "field3" : "yadabla" } ] 

Это именно то, что я хотел.

1

Здесь важна машинопись compiler API, так как это необходимо для правильного анализа и понимания кода. К сожалению, я не думаю, что есть плагин gulp, который реализует этот API.

Я думаю, что ваш лучший выбор - полностью изменить стратегию здесь и решить вашу проблему по-другому или использовать регулярное выражение, чтобы попытаться извлечь константы, которые вы хотите. Если вы не хотите писать свой собственный gulp-plugin, используя API компилятора.

Смежные вопросы