Typescript Gulp-编译类型脚本,但在连接之前拆分流

Typescript Gulp-编译类型脚本,但在连接之前拆分流,typescript,gulp,Typescript,Gulp,我不知道这是否可能。假设我有两套TypeScript源文件要用Gulp编译: var gulp = require('gulp'); var typescript = require('gulp-typescript'); var appSource = "./app/**/*.ts"; var packageSource = "./mypackage/**/*.ts"; gulp.task("build", function() { return gulp.src([appSour

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

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编译将只与所有源文件一起工作

Mypackage是主应用程序的一种扩展,可能是 延迟加载,但类型脚本编译将 只能同时使用所有源文件

没有必要将它们真正编译在一起。编译同时处理所有源文件的原因是,它在构建“Mypackage”时查找主应用程序中创建的所有类型定义

正确的处理方法是分两步编译它

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

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