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