Gulp - 编译TypeScript但在连接之前拆分流

时间:2016-01-28 17:30:16

标签: typescript gulp

我不知道这是否可行。假设我有两套我想用Gulp编译的TypeScript源文件:

var gulp = require('gulp');
var typescript = require('gulp-typescript');

var appSource = "./app/**/*.ts";
var packageSource = "./mypackage/**/*.ts";

gulp.task("build", function() {
    return gulp.src([appSource, packageSource])
          .pipe(typescript())
});

我想将所有TypeScript编译在一起,但是然后根据原始源拆分输出,以便我可以单独连接它们并最终得到两个文件:

app.js
mypackage.js

Mypackage是主应用程序的一种扩展,可能会在以后延迟加载,但TypeScript编译只能与所有源文件一起使用。

1 个答案:

答案 0 :(得分:0)

  

Mypackage是主要应用程序的一种扩展,可能是   稍后懒洋洋地加载,但TypeScript编译会   只能与所有源文件一起使用。

没有必要真正将它们编译在一起。您的编译与所有源文件一起使用的原因是因为它正在查找主应用程序中生成的所有类型定义,当它构建您的" Mypackage"时。

处理这个问题的正确方法是分两步编译。

  1. 编译主应用程序并使用typescript生成声明文件。
  2. 编译" Mypackage"通过使用从主应用程序创建的类型声明。这将允许typescript编译器在编译Mypackage时找到它需要的所有类型。
  3. 下面的代码示例显示了一个类似的用例,我首先编译脚本并从中生成类型声明,然后编译我的规范。

    var gulp = require('gulp');
    var ts = require('gulp-typescript');
    var merge = require('merge2');
    var sourcemaps = require('gulp-sourcemaps');
    var runSequence = require('run-sequence');
    
    gulp.task('compilescripts', function () {
        var tsScriptsProject = ts.createProject('scripts/tsconfig.json');
        var tsResult = tsScriptsProject.src('**/*.ts')
            .pipe(sourcemaps.init())
            .pipe(ts(tsScriptsProject));
        return merge([
            tsResult.dts.pipe(gulp.dest('')),
            tsResult.js.pipe(sourcemaps.write()).pipe(gulp.dest(''))
        ]);
    });
    
    gulp.task('compilespecs', function () {
        var tsSpecProject = ts.createProject('spec/UnitTests/tsconfig.json');
        var tsResult = tsSpecProject.src('**/*.ts')
            .pipe(ts(tsSpecProject));
        return tsResult.pipe(gulp.dest(''));
    });
    
    gulp.task('compileall', function (done) {
        runSequence('compilescripts', 'compilespecs', done);
    });
    

    以下是用于编译脚本的tsconfig.json。

    {
        "compilerOptions": {
            "noImplicitAny": true,
            "removeComments": true,
            "preserveConstEnums": true,
            "noEmitOnError": true,
            "sourceMap": true,
            "declaration": true,
            "outFile": "dev-build/scripts/typesharp.js",
            "target": "es5",
            "suppressImplicitAnyIndexErrors": true
        }
    }