我需要编写一个gulp任务,它只会编译那些实际已经改变的那些Typescript文件并提出这个:
var gulp = require('gulp');
var print = require('gulp-print');
var newer = require('gulp-newer');
var ts = require('gulp-typescript');
gulp.task('compile:ts', function () {
return gulp.src([
'typings/browser.d.ts',
'app/**/*.ts'
])
.pipe(newer('app'))
.pipe(print(function (filepath) {
return 'Compiling ' + filepath + '...';
}))
.pipe(ts({
target: 'es5',
module: 'commonjs',
moduleResolution: 'node',
sourceMap: true,
emitDecoratorMetadata: true,
experimentalDecorators: true,
removeComments: false,
noImplicitAny: false
}))
.pipe(gulp.dest('app'));
});
但是,此任务找不到任何已修改的文件,尽管.ts
个文件的最新时间戳大于.js
对应的文件。
我哪里出错了?
答案 0 :(得分:2)
但是,此任务找不到任何已修改的文件,尽管.ts文件的最新时间戳大于其.js对应文件。
那是因为您没有告诉gulp-newer
将.ts
个文件与.js
个文件进行比较。您正在将.ts
个文件与自己进行比较,因此无法检测到任何更改。
您需要告诉gulp-newer
将每个.ts
文件与其.js
对应文件进行比较:
.pipe(newer({dest:'app',ext:'.js'}))
答案 1 :(得分:0)
有一种更简单的方法可以在文件发生变化时进行编译。使用gulp watch,您可以运行一次该功能,每当您保存更改时,它都会运行编译功能。
gulp.task('watch', function() {
gulp.watch(['ts/filepaths','more/ts/filepaths'],
['compile:ts','otherFunctionsIfNeeded']);
});
如果你重写compile:ts只能编译,使用上面的函数,每当你保存一个ts文件时,它会为你编译它