2016-04-26 14 views
0

Ich habe mehrere Typoskript-Dateien, einige von ihnen exportieren eine Const namens APIS.Zugriff auf Typoskript-Datei Variablenwerte mit Schluck

Ich versuche, auf diese Exporte zuzugreifen (ich möchte alle zu einer einzigen Datei verketten), aber es scheint nicht zu funktionieren. Ich mache offensichtlich etwas falsch, aber ich bin mir nicht sicher was.

Zum Beispiel habe ich einen Ordner namens services mit 2 Dateien: service1.ts, service2.ts.

service1.ts:

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

service2.ts: enthält nicht die APIS var.

Das ist mein 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/')); 
}); 

Wenn ich diese Aufgabe ausführen, bekomme ich nichts. Als ich die Kartenfunktion console.log(file.APIS); hinzugefügt habe, bekomme ich undefined für alle Werte (obwohl es in service1.ts definiert ist!).

Dies folgt auf: Extracting typescript exports to json file using gulp

EDIT: OK, also habe ich versucht, anstelle einer .ts-Datei, die Ausfuhren in einer Js-Datei speichern und jetzt kann ich diese Vars require mit Zugang:

gulp.task (‚default‘, function() {

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

Nun, wenn ich console.log(fileObj.APIS); versuchen bekomme ich die richtigen Werte. Was ich immer noch verwirrt bin, ist, wie ich diese v passieren kann alue on, und erstellen Sie eine einzige Datei aus all diesen vars. Ist es möglich, sie in ein Array zu schieben?

Antwort

1

Dies wird nicht funktionieren, wie Sie denken, es würde funktionieren. Gulp selbst weiß nichts über Typoskript-Dateien, diese Datei ist eine vinyl-file und hat keine Kenntnisse über den Typoskript-Code in seinem Inhalt.

bearbeiten

Basierend auf Ihrem Beispiel, können Sie etwas tun:

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

Danke. Ich versuche, dieses Problem zu umgehen: Wenn ich die Exporte in einer .js-Datei anstelle von .ts-Datei speichern, kann ich mit require darauf zugreifen. Jetzt ist mein Problem, wie man alle diese vars in eine einzelne json Akte sammelt. – Ayelet

+0

@Ayelet Siehe meine Bearbeitung – Alex

+0

Danke, es funktioniert perfekt! :) – Ayelet

0

Anregung

Wenn Sie mehrere Variablen in einer einzigen Datei, dh eine sammeln möchten Gemeinsame Variablen Datei Ich schlage vor gulp-replace.

Schritte

Erstellen Sie eine Datei, erfordert es und Verwendung Tags innerhalb dieser Datei Ihre Variablen zu platzieren.

Tipps

Wenn Sie bereits Dienste verwenden keine Array erstellen. Erstellen Sie stattdessen ein Objekt (JSON), in dem jede Eigenschaft eine Konstante ist. d.h.

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