我想在我的主要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项目。
答案 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
个文件。