2016-04-26 67 views
0

我有幾個打字稿文件,其中一些文件導出一個名爲APIS的常量。使用gulp訪問打字稿文件變量值

我試圖訪問這些出口(我想將它們連接到一個文件),但它似乎並沒有工作。我顯然做錯了什麼,但我不確定是什麼。

例如,我有一個名爲services的文件夾,其中有兩個文件:service1.ts,service2.ts。

service1.ts:

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

service2.ts:不包含APIS變種。

這是我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);添加到映射函數時,我得到undefined所有值(儘管它在service1.ts中定義!)。

這也是繼到:Extracting typescript exports to json file using gulp

編輯: OK,所以我嘗試保存在一個.js文件,而不是一個.ts文的出口,現在我可以用require訪問這些增值經銷商:

gulp.task(「默認」,函數(){

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

現在,如果我嘗試console.log(fileObj.APIS);我得到正確的值。什麼我仍然感到困惑的是我如何通過這些v在所有這些變量中創建一個文件。是否有可能將它們推入數組?

回答

1

這不會工作,因爲你認爲它會工作。 Gulp本身不知道打字稿文件,該文件是vinyl-file,並且不知道其內容中的打字稿代碼。

編輯

根據你的榜樣,你可以做這樣的事情:

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

謝謝。我正在嘗試解決此問題:如果我將導出保存在.js文件而不是.ts文件中,則可以使用require訪問它們。現在我的問題是如何將所有這些變量收集到單個json文件中。 – Ayelet

+0

@Ayelet查看我的編輯 – Alex

+0

謝謝,它完美的作品! :) – Ayelet

0

建議

如果你想收集多個變量到一個文件即常見變量文件我建議gulp-replace

步驟

創建一個文件,要求它和使用標記該文件內把你的變量。

諮詢

如果您正在使用的服務不創建一個數組。相反,創建一個對象(JSON),其中每個屬性都是常量。即

var constants = { 
    const_1: 0, 
    const_2: 1, 
    const_3: 2, 
}