Gulp-övervaka TypeScript-filer och publicera endast ändrade filer


I Visual Studio 2015 spårar jag de ändringar som görs i mina TS-filer så att jag kan kopiera de genererade JS-filerna och placera dem i min wwwroot-katalog. Men varje gång jag gör en ändring i en enda TS-fil byggs och kopieras alla till wwwroot-mappen. Vad bör jag ändra här så att endast nya JS-filer kopieras till wwwroot?

Jag använder gulp-watch för att spåra filändringar och gulp-newer för att filtrera de nya filerna.

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']);
});

Svar #1

gulp.watch har två huvudformer. Båda returnerar en EventEmitter som sänder förändringshändelser. Den första av dessa tar en glob, ett valfritt alternativobjekt och en array av uppgifter som sina parametrar.

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

Enkelt uttryckt, när någon av filerna som matchas av globben ändras, kör uppgifterna. I kodblocket ovan, när någon fil i undermapparna Contents/Scripts/**/*.ts som har filtillägget .ts ändras, kommer uppgiften min:site:js att köras mot dessa filer.

Den andra formen tar globen, ett valfritt optionsobjekt och en valfri callback som kommer att köras när en förändring upptäcks.

För mer information, se API-dokumentationen

Använd gulp-typescript för att kompilera dina .ts-filer vid förändring, här är ett exempel:

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

Relaterade artiklar