我有几个打字稿文件,其中一些导出名为APIS
的const。
我正在尝试访问这些导出(我想将所有导出都连接到一个文件中),但似乎不起作用。我显然做错了,但是我不确定。
例如,我有一个名为services的文件夹,其中包含2个文件:service1.ts,service2.ts。
service1.ts:
...
export const APIS = [ { "field1" : "blabla" } ];
service2.ts:不包含
APIS
var。这是我的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);
添加到map函数时,所有值都得到undefined
(尽管它在service1.ts中定义!)。以下是:Extracting typescript exports to json file using gulp
编辑:好的,所以我尝试将导出保存在.js文件而不是.ts文件中,现在我可以使用
require
访问这些var了:gulp.task('default',function(){
return gulp.src('./**/*.service.export.js')
.pipe(map(function(file) {
var fileObj = require(file.path);
...
}))
现在,如果尝试
console.log(fileObj.APIS);
,我将获得正确的值。我仍然感到困惑的是如何传递这些值,并从所有这些变量中创建一个文件。是否可以将它们推入数组? 最佳答案
这将无法正常工作,就像您认为的那样。 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;
});