首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任务只编译已更改的文件。

任务只编译已更改的文件。
EN

Stack Overflow用户
提问于 2016-05-18 11:14:22
回答 2查看 703关注 0票数 0

我需要编写一个gulp任务,它只编译那些实际上已经更改的类型记录文件,并得到如下结果:

代码语言:javascript
复制
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文件的时间戳要高。

我哪里出错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-18 12:15:38

但是,这个任务没有找到任何修改过的文件,尽管.ts文件的时间戳比.js文件的时间戳要高。

这是因为您没有告诉gulp-newer.ts文件与.js文件进行比较。您正在将.ts文件与其自身进行比较,因此不会检测到任何更改。

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

代码语言:javascript
复制
.pipe(newer({dest:'app',ext:'.js'}))
票数 2
EN

Stack Overflow用户

发布于 2016-05-18 12:14:06

当文件发生变化时,有一种更简单的编译方法。使用gulp,您可以运行该函数一次,只要您保存更改,它就会运行编译函数。

代码语言:javascript
复制
gulp.task('watch', function() {
     gulp.watch(['ts/filepaths','more/ts/filepaths'],
     ['compile:ts','otherFunctionsIfNeeded']);
});

如果您使用上面的函数,将编译: ts重写为只编译,那么每当您保存ts文件时,它都会为您编译它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37297941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档