Gulp任务只能编译已更改的文件

时间:2016-05-18 11:14:22

标签: 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([
         '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对应的文件。

我哪里出错了?

2 个答案:

答案 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文件时,它会为你编译它