2016-04-25 5 views
0

私はいくつかのタイプスクリプトファイルを持っていますが、その中にはオブジェクトの配列である特定の名前のあるAPISをエクスポートするものがあります。 これらのエクスポートすべての値を抽出し、gulpを使用してjsonファイルにパイプしたいとします。gulpを使ってjsonファイルにtypescriptをエクスポートする

たとえば、service1.ts、service2.ts、service3.tsの3つのファイルを持つservicesという名前のフォルダがあります。

service1.ts:

... 
export const APIS = [ { "field1" : "blabla" } ]; 

service2.ts:

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

service3.ts:は - APISのVARをエクスポートしません。

私はオーデルで一口を使用するには、次のようなものに見える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')); 
}); 

私は両方のtypescriptです&一口に新たなんだので、私はこの...任意のアイデアを実現するかどうかはわかりませんか? :)

編集:これはOOTB解決策がないことを理解しています。自分のタスク/プラグインをライターにする必要があります。私はそれをどうやって達成するのか本当に分かりません。 理想的には、プロパティを持つオブジェクトとしてts/jsファイルを処理できるgulpプラグイン(またはプラグインの組み合わせ)を見つけることです。それから私はファイルから必要なvarを抽出することができます。

私は本当にそのようなものを見つけることができませんでしたが、文字列操作プラグインのみ - 文字列として私のTSファイルを扱い、正規表現で検索を使用することはあまりにも複雑です。私がここで紛失しているものはありますか?これを行うより直接的な方法がありますか?

+0

好奇心から、なぜあなたはtypescriptをjsにコンパイルし、それをjsonファイルに入れたいのですか? – Grant

+0

私はしません。 APISのvarsからjsonファイルを作成したいだけです。 – Ayelet

+1

申し訳ありませんが、あなたはtsファイルを検索してAPIS constを抽出できるgulpプラグインが必要になりますが、プラグインを私の頭の上から外して考えることはできません。あなたの現在のニーズを解決するためにこれを行う必要がある場合は、自分自身を作るために – 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が適切です。これは、tsコードを適切に解析して理解するために必要なものです。残念ながら、私はこのAPIを実装するgulpプラグインはないと思っています。

私は、ここで戦略を完全に変更し、別の方法で問題を解決したり、正規表現を使って必要な定数を抽出しようとしています。コンパイラAPIを使用して独自のgulp-pluginを作成したい場合を除きます。

関連する問題