Я пытаюсь создать следующий рабочий процесс:
- Смотреть изменения файлов
- Скомпилируйте TypeScript после завершения:
- Перезапустите приложение Express, после того как это будет завершено:
- Браузер LiveReload
Вот мой текущий подход:
gulp.task('default', function() {
//1. run your script as a server
var server = gls.new('./bin/www');
server.start();
gulp.watch('./**/*.js', function(file) {
var promise = server.start.bind(server)(); //restart my server
promise.then(function(result) {
console.log("restarted!");
setTimeout( function() {
server.notify.apply(server, [file]);
}, 500);
});
});
});
Это работает до console.log("restarted!");
Я добавил setTimeout, так как перезагрузка произойдет до того, как сервер будет запущен. Но с ним вообще ничего не происходит никакой перезагрузки.
ИЗМЕНИТЬ
Вот мое первое рабочее решение:
var gulp = require('gulp'),
nodemon = require('gulp-nodemon'),
livereload = require('gulp-livereload'),
ts = require('gulp-typescript');
var tsProject = ts.createProject('tsconfig.json');
gulp.task('typescript', function() {
console.log('Compiling TypeScript');
var tsResult = tsProject.src({base: './'})
.pipe(ts(tsProject));
return tsResult.js.pipe(gulp.dest('./'));
});
gulp.task('serve', ['typescript'], function () {
gulp.watch('./**/*.ts', ['typescript']);
livereload.listen();
nodemon({
script: './bin/www',
ext: 'js',
}).on('restart', function () {
setTimeout(function () {
console.log("reload!");
livereload.reload();
}, 500);
});
});
Но я все равно хотел бы избавиться от этого уродливого setTimeout.
Дополнительный вопрос Можно ли решить то же самое без Gulp, используя только сценарий оболочки? По сравнению с командой TSC из командной строки, версия gulp компилируется целую вечность.