Доступ к значениям переменных файла машинописного текста с помощью gulp

У меня есть несколько машинописных файлов, некоторые из них экспортируют константу с именем APIS.

Я пытаюсь получить доступ к этим экспортным данным (я хочу объединить их все в один файл), но, похоже, это не работает. Я явно делаю что-то не так, но я не уверен, что.

Например, у меня есть папка с именем 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!).

Это следующее: Извлечение экспорта машинописного текста в файл json с помощью 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);, я получу правильные значения. Что меня все еще смущает, так это то, как я могу передать эти значения и создать один файл из всех этих переменных. Можно ли вставить их в массив?


person Ayelet    schedule 26.04.2016    source источник


Ответы (2)


Это не сработает так, как вы думаете. Сам Gulp ничего не знает о файлах машинописного текста, этот файл является виниловым файлом и имеет не знает о машинописном коде в его содержании.

Изменить

Основываясь на вашем примере, вы можете сделать что-то вроде этого:

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;
});
person Alex    schedule 26.04.2016
comment
Спасибо. Я пытаюсь обойти эту проблему: если я сохраню экспорт в файле .js вместо файла .ts, я смогу получить к ним доступ, используя require. Теперь моя проблема заключается в том, как собрать все эти переменные в один файл json. - person Ayelet; 27.04.2016