2016-04-26 21 views
0

いくつかのタイプスクリプトファイルがありますが、そのうちのいくつかはAPISという名前のconstをエクスポートします。gulpを使用してtypescriptファイルの変数値にアクセスする

私はこれらのエクスポートにアクセスしようとしています(これらをすべて1つのファイルに連結したい)が、動作していないようです。私は明らかに何か間違っているが、私は何がわからない。

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

service1.ts:

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

service2.ts:APIS VARが含まれていません。

これは私のgulpfile.jsです:私はこのタスクを実行すると

var gulp = require('gulp'); 
var concat = require('gulp-concat'); 
var map = require('gulp-map'); 

gulp.task('default', function() { 
    return gulp.src('.../services/*.ts') 
     .pipe(map(function(file) { 
      return file.APIS; 
      })) 
     .pipe(concat('all.js')) 
     .pipe(gulp.dest('./test/')); 
}); 

は、私が何を取得。 console.log(file.APIS);をmap関数に追加すると、すべての値に対してundefinedが得られます(ただし、service1.tsで定義されています)。

これは、次のされた:Extracting typescript exports to json file using gulp

EDIT: OK、私は代わりに.TSファイルの.jsファイルでの輸出を保存しようとした、そして今私はrequireを使用して、これらのVARSにアクセスできます。

gulp.task(「デフォルト」は、関数(){私はconsole.log(fileObj.APIS);をしようとした場合

return gulp.src('./**/*.service.export.js') 
     .pipe(map(function(file) { 
      var fileObj = require(file.path); 
      ... 
      })) 

は、今私は正しい値を取得します。私はまだについて混乱している何が、私はこれらのVを渡すことができる方法ですこれらすべてのvarsの中から1つのファイルを作成します。それらを配列にプッシュすることは可能ですか?

答えて

1

これはうまくいくとは思われません。 Gulp自体はtypescriptファイルについては何も知らず、そのファイルはvinyl-fileであり、そのコンテンツ内のtypescriptコードについての知識はありません。

編集

あなたの例に基づいて、あなたはこのような何か行うことができます。

var gulp = require('gulp'); 
var concat = require('gulp-concat'); 
var map = require('gulp-map'); 
var fs = require('fs'); 

gulp.task('test', function() 
{ 
    var allConstants = []; 
    var stream = gulp.src('./**/*.service.export.js') 
     .pipe(map(function(file) 
     { 
      var obj = require(file.path); 
      if (obj.APIS != null) 
       allConstants = allConstants.concat(obj.APIS); 
      return file; 
     })); 

    stream.on("end", function (cb) 
    { 
     // Do your own formatting here 
     var content = allConstants.map(function (constants) 
     { 
      return Object.keys(constants).reduce(function (aggregatedString, key) 
      { 
       return aggregatedString + key + " : " + constants[key]; 
      }, ""); 
     }).join(", "); 

     fs.writeFile('filename.txt', content, cb); 
    }); 
    return stream; 
}); 
+0

ありがとうございます。私はこの問題を回避しようとしています。エクスポートファイルを.tsファイルではなく.jsファイルに保存すると、requireを使用してアクセスできます。今私の問題は、どのようにすべてのvarsを単一のjsonファイルに集めるかです。 – Ayelet

+0

@Ayelet私の編集を参照 – Alex

+0

ありがとう、それは完璧に動作します! :) – Ayelet

0

提案をあなたはすなわち、A単一のファイルに複数の変数を収集する場合

共通変数ファイルgulp-replaceをお勧めします。

ステップ

、ファイルを作成し、それを必要とし、あなたの変数を配置するために、そのファイル内のタグを使用します。

アドバイス

すでに配列を作成していないサービスを使用している場合。代わりに、すべてのプロパティが定数であるオブジェクト(JSON)を作成します。すなわち、

var constants = { 
    const_1: 0, 
    const_2: 1, 
    const_3: 2, 
} 
関連する問題