4

在 Visual Studio 2015 中,我正在跟踪对我的 TS 文件所做的更改,以便我可以复制生成的 JS 文件并将它们输出到我的 wwwroot 目录。但是,每当我对单个 TS 文件进行更改时,它们都会被构建并输出到 wwwroot 文件夹。我应该在这里更改什么以便只将新的 JS 文件复制到 wwwroot?

我使用gulp-watch跟踪文件更改并 使用gulp-newer过滤新文件。

gulp.task('min:site:js', function () {
return gulp
  .src('Contents/Scripts/**/*.js', { relative: true })
  .pipe(newer('wwwroot/js/'))
  .pipe(gulp.dest('wwwroot/js/'))
  .pipe(uglify())
  .pipe(rename({ extname: '.min.js' }))
  .pipe(gulp.dest('wwwroot/js/'));
});

gulp.task('watch:ts', function () {
   gulp.watch('Contents/Scripts/**/*.ts', ['min:site:js']);
});
4

1 回答 1

3

gulp.watch有两种主要形式。两者都返回一个发出更改事件的 EventEmitter。第一个接受一个 glob、一个可选的选项对象和一个任务数组作为它的参数。

gulp.watch('Contents/Scripts/**/*.ts', ['min:site:js']);

简单地说,当 glob 匹配的任何文件发生变化时,运行任务。在上面的代码块中,当Contents/Scripts/**/*.ts子文件夹中具有扩展名的任何文件.ts发生更改时,任务min:site:js将针对这些文件运行。

第二种形式采用 glob、一个可选的选项对象和一个可选的回调,该回调将在获取更改时运行。

有关更多信息,请参阅api 文档

使用gulp-typescript在更改时编译您的.ts文件,这里有示例:

var gulp = require('gulp');
var ts = require('gulp-typescript');
var merge = require('merge2');

var tsProject = ts.createProject({
    declaration: true,
    noExternalResolve: true
});

gulp.task('scripts', function() {
    var tsResult = gulp.src('lib/*.ts')
                    .pipe(ts(tsProject));

    return merge([ // Merge the two output streams, so this task is finished         when the IO of both operations are done. 
        tsResult.dts.pipe(gulp.dest('release/definitions')),
        tsResult.js.pipe(gulp.dest('release/js'))
    ]);
});
gulp.task('watch', ['scripts'], function() {
    gulp.watch('lib/*.ts', ['scripts']);
});

https://www.npmjs.com/package/gulp-typescript

于 2015-11-14T08:37:48.557 回答