Gulp 停止任务以仅编译已更改的文件

Gulp 停止任务以仅编译已更改的文件,gulp,Gulp,我需要编写一个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([

我需要编写一个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
对应文件的时间戳更近,但此任务找不到任何修改过的文件


哪里出错了?

当文件发生变化时,有一种更简单的编译方法。使用gulp watch,您可以运行该函数一次,并且无论何时保存更改,它都将运行编译函数

gulp.task('watch', function() {
     gulp.watch(['ts/filepaths','more/ts/filepaths'],
     ['compile:ts','otherFunctionsIfNeeded']);
});

如果使用上述函数将compile:ts重写为仅编译,则每当保存ts文件时,它都会为您编译它

当文件发生更改时,有一种更简单的编译方法。使用gulp watch,您可以运行该函数一次,并且无论何时保存更改,它都将运行编译函数

gulp.task('watch', function() {
     gulp.watch(['ts/filepaths','more/ts/filepaths'],
     ['compile:ts','otherFunctionsIfNeeded']);
});
如果使用上述函数将compile:ts重写为仅编译,则每当保存ts文件时,它都会为您编译它

但是,此任务找不到任何修改过的文件,尽管有.ts文件的时间戳比.js文件的时间戳更近

这是因为你没有告诉
吞下更新的
来比较
.ts
文件和
.js
文件。您正在将
.ts
文件与其自身进行比较,因此无法检测到任何更改

您需要告诉
gulp newer
将每个
.ts
文件与其对应的
.js
文件进行比较:

.pipe(newer({dest:'app',ext:'.js'}))
但是,此任务找不到任何修改过的文件,尽管有.ts文件的时间戳比.js文件的时间戳更近

这是因为你没有告诉
吞下更新的
来比较
.ts
文件和
.js
文件。您正在将
.ts
文件与其自身进行比较,因此无法检测到任何更改

您需要告诉
gulp newer
将每个
.ts
文件与其对应的
.js
文件进行比较:

.pipe(newer({dest:'app',ext:'.js'}))