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

У меня есть несколько машинописных файлов, некоторые из них экспортируют const с именем 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

РЕДАКТИРОВАТЬ: ОК, поэтому я попытался сохранить экспорт в файл.js вместо файла.ts, и теперь я могу получить доступ к этим переменным, используя require:

gulp.task ('default', function () {

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

Теперь, если я попробую console.log(fileObj.APIS); Я получаю правильные значения. Что меня все еще смущает, так это то, как я могу передать эти значения и создать один файл из всех этих переменных. Можно ли их запихнуть в массив?

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;
});

Предложение

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

меры

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

Совет

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

var constants =  {
   const_1: 0,
   const_2: 1,
   const_3: 2,
}
Другие вопросы по тегам