Gulp 停止任务以仅编译已更改的文件
我需要编写一个gulp任务,该任务将只编译那些实际已更改的Typescript文件,并得出以下结论: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([
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'}))