2016-04-26 9 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

EDIT: ОК, так что я попытался сохранения экспорта в виде файла .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 alue on и создать один файл из всех этих vars. Можно ли вставлять их в массив?

ответ

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. Теперь моя проблема заключается в том, как собрать все эти vars в один файл json. – Ayelet

+0

@Ayelet Просмотреть мое редактирование – Alex

+0

Спасибо, он отлично работает! :) – Ayelet

0

Предложение

Если вы хотите, чтобы собрать несколько переменных в одном файле т.е. файл общих переменных я предлагаю gulp-replace.

шаги

Создать файл, требуют и теги использования в этом файле, чтобы поместить переменные.

Advice

Если вы уже используете услуги не создают массив. Вместо этого создайте объект (JSON), где каждое свойство является константой. то есть

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