通过gulp-typescript传递.js文件而不使用ERROR TS6054

时间:2015-06-03 09:42:36

标签: typescript gulp

我想在我的主要gulp工具链中包含typescript,以便我可以根据需要和时间允许将.js文件转换为.ts文件。如果typescript步骤不对.js文件执行任何操作,那就没问题了。

这有意义吗?如果是这样,我怎么能做到这一点?我尝试了以下方法:

function compileScript(inputFiles, outputName, outputPath) {
    return r.gulp.src(inputFiles)
        .pipe(r.sourcemaps.init())
        .pipe(r.ngAnnotate())
// I'd like to do this, but processing fails if not all files are *.ts
//      .pipe(r.typescript({ target: 'ES5' }))
        .pipe(r.uglify())
        .pipe(r.concat(outputName))
        .pipe(r.sourcemaps.write('.'))
        .pipe(r.gulp.dest(outputPath));
}

但它没有产生输出,引用:

  

错误6054:文件'script.js'必须包含扩展名'.ts'或'.d.ts'。

也许有一个我忽略的打字稿选项,或者一个不会破坏我的源图的gulp条件管道工具?如果我运行.ts和.js文件的两个单独步骤,它们最终会乱序连接。

我想避免一个大爆炸的方法。

P.S。我正在Visual Studio中构建一个ASP.NET项目。

1 个答案:

答案 0 :(得分:1)

您似乎正在向gulp-typescript提供完整的文件列表,仅使用gulp-filter过滤掉*.ts个文件:

function compileScript(inputFiles, outputName, outputPath) {
    var filter = require('gulp-filter')('**/*.ts'); // setup filter

    return r.gulp.src(inputFiles)
        .pipe(r.sourcemaps.init())
        .pipe(filter) // filter out *.ts files
        .pipe(r.typescript({ target: 'ES5' })) // compile them
        .pipe(filter.restore()) // restore all other files to proceed
        .pipe(r.ngAnnotate())
        .pipe(r.uglify())
        .pipe(r.concat(outputName))
        .pipe(r.sourcemaps.write('.'))
        .pipe(r.gulp.dest(outputPath));
}

作为旁注,我认为您应首先编译*.ts个文件,然后才能编译ng-annotate个文件。