我需要编写一个gulp任务,它只编译那些实际上已经更改的类型记录文件,并得到如下结果:
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文件的时间戳要高。
我哪里出错了?
发布于 2016-05-18 12:15:38
但是,这个任务没有找到任何修改过的文件,尽管.ts文件的时间戳比.js文件的时间戳要高。
这是因为您没有告诉gulp-newer将.ts文件与.js文件进行比较。您正在将.ts文件与其自身进行比较,因此不会检测到任何更改。
您需要告诉gulp-newer将每个.ts文件与其.js对应文件进行比较:
.pipe(newer({dest:'app',ext:'.js'}))发布于 2016-05-18 12:14:06
当文件发生变化时,有一种更简单的编译方法。使用gulp,您可以运行该函数一次,只要您保存更改,它就会运行编译函数。
gulp.task('watch', function() {
gulp.watch(['ts/filepaths','more/ts/filepaths'],
['compile:ts','otherFunctionsIfNeeded']);
});如果您使用上面的函数,将编译: ts重写为只编译,那么每当您保存ts文件时,它都会为您编译它。
https://stackoverflow.com/questions/37297941
复制相似问题