使用 gulp 访问打字稿文件变量值

Accessing typescript file variable values using gulp

本文关键字:文件 变量值 gulp 访问 使用      更新时间:2023-09-26

我有几个打字稿文件,其中一些导出名为 APIS 的常量。

我正在尝试访问这些导出(我想将它们全部连接到一个文件中),但它似乎不起作用。我显然做错了什么,但我不确定是什么。

例如,我有一个名为服务的文件夹,包含 2 个文件:service1.ts、service2.ts。

服务1.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/'));
});

当我运行此任务时,我什么也得不到。当我向 map 函数添加console.log(file.APIS);时,我得到了所有值的undefined(尽管它是在 service1.ts 中定义的!

这是:使用 gulp 将打字稿导出提取到 json 文件

编辑:好的,所以我尝试将导出保存在.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);我会得到正确的值。我仍然感到困惑的是,我如何传递这些值,并从所有这些变量中创建单个文件。是否可以将它们推入数组中?

这不会像您认为的那样有效。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,
}