2016-04-25 66 views
0

我有幾個打字稿文件,其中一些文件輸出某個var - 名爲APIS - 這是一個對象數組。 我想提取所有這些導出的值,並使用gulp將它們管到一個json文件中。使用gulp提取輸出到json文件的打字稿

例如,我有一個名爲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: - 不導出API的變種。

我想在奧得河用一口創建一個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解決方案,我需要編寫自己的任務/插件。雖然我不確定如何實現這一點。 理想情況下,我想要的是找到一個吞嚥插件(或插件的組合),可以將ts/js文件作爲具有屬性的對象處理。然後我可以從文件中提取我需要的變量。

我真的找不到像這樣的東西,只有字符串操作插件 - 對待我的ts文件作爲字符串和正則表達式使用搜索似乎對我來說過於複雜。有什麼我在這裏失蹤?有沒有更直接的方法來做到這一點?

+0

出於好奇,你爲什麼要將打字稿編譯爲js並將其放入json文件中? – Grant

+0

我不知道。我只是想從APIS變量中創建一個json文件。 – Ayelet

+1

好的,你需要一個可以搜索你的ts文件並提取APIS常量的gulp插件,但是我不能想到一個可以用來做這件事的頭頂插件,你可能需要如果你確實需要這樣做來解決你目前的需求 – Grant

回答

0

這就是我最終做的,它爲我工作。如果有其他人發現它很有用,我會在這裏定位它。 :)

相反的.ts的,我保存在.js文件的出口,即:

service2.export.js:

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

基於這裏給出了答案:https://stackoverflow.com/a/36869651/3007732我創建了一個吞嚥任務如下:

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是相關的,因爲這是你需要正確解析和理解ts代碼。不幸的是,我不認爲有一個實現這個API的gulp插件。

我認爲你最好的選擇是在這裏完全改變策略,並以另一種方式解決你的問題,或者使用正則表達式來嘗試提取你想要的常量。除非你想用編譯器API編寫你自己的gulp-plugin。