【问题标题】:Accessing typescript file variable values using gulp使用 gulp 访问 typescript 文件变量值
【发布时间】:2016-08-20 12:30:47
【问题描述】:

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

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

例如,我有一个名为 services 的文件夹,其中包含 2 个文件: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); 添加到 map 函数时,我得到了所有值的 undefined(尽管它是在 service1.ts 中定义的!)。

以下是:Extracting typescript exports to json file using 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);,我会得到正确的值。我仍然困惑的是如何传递这些值,并从所有这些变量中创建一个文件。是否可以将它们推入数组?

【问题讨论】:

    标签: javascript typescript gulp gulp-concat gulp-plugin


    【解决方案1】:

    这不会像您认为的那样有效。 Gulp 本身对 typescript 文件一无所知,该文件是 vinyl-file 并且不知道其内容中的 typescript 代码。

    编辑

    根据您的示例,您可以执行以下操作:

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

    【讨论】:

    • 谢谢。我正在尝试解决这个问题:如果我将导出保存在 .js 文件而不是 .ts 文件中,我可以使用 require 访问它们。现在我的问题是如何将所有这些变量收集到一个 json 文件中。
    【解决方案2】:

    建议

    如果您想将多个变量收集到一个文件中,即一个公共变量文件,我建议gulp-replace

    步骤

    创建一个文件,要求它并在该文件中使用标签来放置变量。

    建议

    如果您已经在使用服务,请不要创建数组。而是创建一个对象 (JSON),其中每个属性都是一个常量。即

    var constants =  {
       const_1: 0,
       const_2: 1,
       const_3: 2,
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 1970-01-01
      • 2017-12-16
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      相关资源
      最近更新 更多